javascript - 如何处理多个异步请求?

标签 javascript asynchronous

所以在我的应用中,用户可以上传 1 到 3 张图片,当他点击保存按钮时,我将它们上传到 firebase。

到目前为止,这是我的代码,我知道它很糟糕,我正在寻找一种使其高效的方法。

    if (img1) {
      uploadImage(img1, 'image/jpeg', 'imageOne', uuid)
      .then(() => {
        console.log('Image 1 was uploaded succesfully');

      }).catch(err => console.log(err));
    }

    if (img2) {
      uploadImage(img2, 'image/jpeg', 'imageTwo', uuid)
      .then(() => {
        console.log('Image 2 was uploaded succesfully');

      }).catch(err => console.log(err));
    }

    if (img3) {
      console.log('there is img3')
      uploadImage(img3, 'image/jpeg', 'imageThree', uuid)
      .then(() => {
        console.log('Image 3 was uploaded succesfully');

      }).catch(err => console.log(err));
    }

问题是我想在上传完成后将用户重定向到主页。但是很难决定重定向代码应该放在哪里。

我考虑过像这样嵌套 if 语句:

if (img1) {
      uploadImage(img1, 'image/jpeg', 'imageOne', uuid)
      .then(() => {
        console.log('Image 1 was uploaded succesfully');

        if (img2) {
          uploadImage(img2, 'image/jpeg', 'imageTwo', uuid)
          .then(() => {
            console.log('Image 2 was uploaded succesfully');

          }).catch(err => console.log(err));
        }


      }).catch(err => console.log(err));
    }

但是如果用户只上传了 img2 而不是 img1 呢?那么 img2 将永远不会被上传。我怎样才能改进我的代码?

最佳答案

你可以使用 Promise.all

let promises = [];
if (img1) {
    promises.push(uploadImage(img1, 'image/jpeg', 'imageOne', uuid);
}
if (img2) {
    promises.push(uploadImage(img2, 'image/jpeg', 'imageTwo', uuid);
}

// etc...

Promise.all(promises).then(() => {console.log("All requests are done")})

关于javascript - 如何处理多个异步请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45596384/

相关文章:

C# - 为高端服务器使用异步

ios - 在 viewDidLoad 中异步加载图像,并带有事件指示器

c++ - 是否保证为返回 void 的函数调用 std::async?

c# - .Wait() 和 .GetAwaiter().GetResult() 有什么区别?

c# - 在 C# 中有没有一种方法可以调用异步方法而不使调用者也异步?

javascript - 在 jQuery 中单击按钮

javascript - 特定格式的电话号码验证

javascript - array.splice 不工作

javascript - 如何在使用 Simplebar js 时以编程方式滚动到 div 的底部

javascript - 用JavaScript封装,存在吗?