首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >嵌套承诺的替代

嵌套承诺的替代
EN

Stack Overflow用户
提问于 2020-08-31 10:06:52
回答 1查看 102关注 0票数 0

我正在尝试创建一个函数,该函数获取一个预签名的s3 url (调用1),并对s3执行put操作。我能够在脑海中弄清楚的唯一方法是使用嵌套的promise,我认为它是一种反模式。

用js/伪代码写出来

代码语言:javascript
运行
复制
uploadfile(file){
  return new Promise((resolve, reject) => {
    axios.get(get-presigned-s3url).then((url) =>{ return axios.put(file)}
  })
}

let filePromises = files.forEach(file => uploadfile(file));
promises.all((filePromises) => notifyUpload(filePromises));

我需要从uploadfile函数返回一个promise,以等待所有promise解析。处理这种情况的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-31 10:10:14

因为axios.get已经返回了一个Promise,所以您不需要使用new Promise在它周围构造另一个Promise。

files.forEach不起作用,因为forEach返回undefined。改用.map,这样你就有了一系列的承诺。

代码语言:javascript
运行
复制
const uploadFile = file => axios.get(url)
    .then((url) => { return axios.put(file); });
代码语言:javascript
运行
复制
Promise.all(
  files.map(uploadFile)
)
  .then(notifyUpload)
  .catch(handleErrors);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63663868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档