我有以下一段代码,它点击一个 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/