【问题标题】:Node.js async :success message after upload in for loopNode.js async:在for循环中上传后的成功消息
【发布时间】:2017-12-23 03:20:17
【问题描述】:

这是我在循环中将一些数据上传到 aws s3 的函数。

    for (var i=0;i<crop_sizes.length;i++){
                uploadToS3(crop_sizes[i]);
            }

function uploadToS3(crops){

   s3.upload(crops,function(err,success){
     if(!err){
       console.log('uploaded');
     }
})

}

它工作正常,但我想在所有上传后显示一条成功消息,所以我怎样才能实现它async libray。

【问题讨论】:

    标签: node.js express asynchronous


    【解决方案1】:
    var promises = [];
    for (var i = 0; i < crop_sizes.length; i++) {
        promises.push(uploadToS3(crop_sizes[i]));
    }
    function uploadToS3(crops) {
        return new Promise((resolve, reject) => {
            s3.upload(crops, function (err, success) {
                if (err) {
                    return reject();
                }
                resolve();
            })
        });
    }
    Promise.all(promises).then(function () {
        console.log('success');
    }).catch(function (err) {
        console.error(err);
    });
    

    【讨论】:

    • 问题是关于async library。
    【解决方案2】:

    如果你想继续使用这个库,你可以使用async.each

    each(crop_sizes, s3.upload.bind(s3), function(err) {
      if(err) { 
        console.error(err)
      } else {
        console.log('success')
      }
    })
    

    【讨论】:

    • bind(s3) 是什么我看不懂
    • 但它如何适用于我的情况??
    • 非常直接:它创建了一个调用s3.upload 的函数,带有s3 上下文。我确实建议您阅读一些文档,真的。
    • 好吧,我必须将一些参数传递给upload
    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2016-09-19
    • 1970-01-01
    • 2011-04-15
    相关资源
    最近更新 更多