javascript - 异步事件后的数组顺序

标签 javascript node.js asynchronous mean-stack

我有以下一段代码,它点击一个 API 来上传一组图像并在一个数组中返回它们的链接;但是,不遵守图像的上传顺序。

if (req.files) {

  var uploadedImages = [];

  for (var i = 0; i < req.files.length; i++) {
    imgur.uploadFile(req.files[i].path)
      .then(function (json) {
        uploadedImages.push(json.data.link);
        if (uploadedImages.length === req.files.length) {
          console.log(uploadedImages);
          //Further processing
        }
      })
      .catch(function (err) {
        console.log("Imgur API Error!");
        console.log(err.message);
        res.redirect('/participants?err=' + encodeURIComponent('An unknown error occured. Please try again.'));
      });
  }

例如,如果我上传 1.jpg、2.jpg 和 3.jpg,保存这些图片各自链接的数组不一定按相同的顺序排列。确保订单在此异步事件期间不受影响的最佳方法是什么?

最佳答案

使用 Promise.all 将 promise 数组转换为数组的 promise:

var uploads = req.files.map(function (file) {
  return imgur.uploadFile(file.path)
    .then(function (json) {
      return json.data.link;
    });
});

Promise.all(uploads)
  .then(function (uploadedImages) {
    console.log(uploadedImages);
    // Further processing
  })
  .catch(function (err) {
    console.log("Imgur API Error!");
    console.log(err.message);
    res.redirect('/participants?err=' + encodeURIComponent('An unknown error occured. Please try again.'));
  });

关于javascript - 异步事件后的数组顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419545/

相关文章:

javascript - 回调中对此的困惑

javascript - 使用正则表达式和 javascript 获取字符串中的精确匹配

javascript - 首次单击某个按钮时到处都是 Div

JavaScript Date.getWeek()?

node.js - Mongodb GeoSpatial Query with NodeJs (Haversine formula)

node.js - 如何在 Amazon Dynamodb 中使用聚合函数

javascript - node.js:如何在 forEach 循环中使用异步调用实现路由方法?

javascript - 如何在 AngularJs 中使用相互依赖的并行和顺序函数调用?

javascript - JavaScript 中异步回调的结构 : Synching the Asynch

javascript - 重构 JavaScript ES6