处理一系列承诺

时间:2013-10-15 12:35:28

标签: node.js promise q

我有一个将文件上传到服务器并返回一个promise的函数。 我想检查每个承诺何时完成并显示“成功部署文件名...”的日志。

我不关心承诺的顺序,但Q.all()对我没有帮助,因为它只在所有承诺完成时返回,或者在失败时快速失败。

我想写一些东西来检查我的一个承诺何时完成并显示日志。 由于每个文件都很大,我希望用户能够收到迄今已上传的内容的警报。

当我的一个文件失败时,用户会看到如下内容:

Successfully deployed file1.txt
Successfully deployed file2.txt
Failed deploying file3.txt

2 个答案:

答案 0 :(得分:3)

为什么不简单地循环你的文件(或承诺)?

var files = ['file1.txt', 'file2.txt'/*, ...*/];
files.forEach(function (file) {
  uploadFile(file).done(function () {
    console.log('Successfully deployed ' + file);
  }, function () {
    console.log('Failed deployed ' + file);
  });
});

答案 1 :(得分:0)

@ kamituel的答案非常有效。如果你需要快速失败的行为(正如你在评论中所要求的那样),你可以在失败时设置一个标志。

var failed = false;
var files = ['file1.txt', 'file2.txt'/*, ...*/];
files.forEach(function (file) {
  uploadFile(file).done(function () {
    if (failed) return;
    console.log('Successfully deployed ' + file);
  }, function () {
    if (failed) return;
    failed = true;
    console.log('Failed deployed ' + file);
  });
});
相关问题