【问题标题】:Handling an array of promises处理一系列承诺
【发布时间】:2013-10-23 06:25:12
【问题描述】:

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

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

我想写一些东西来检查我的一个承诺何时完成并显示日志。 由于每个文件都可能很大,因此我希望用户能够收到到目前为止已上传的内容的提醒。

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

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

【问题讨论】:

    标签: node.js promise q


    【解决方案1】:

    @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);
      });
    });
    

    【讨论】:

      【解决方案2】:

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

      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);
        });
      });
      

      【讨论】:

      • 嗯,在测试之后,它并没有给我一个快速失败(也就是说,一旦其中一个文件失败,我想跳过其他承诺)而且我也无法知道一切何时顺利完成。您还有其他选择吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 2018-10-03
      • 1970-01-01
      • 2018-03-18
      • 2020-12-15
      • 1970-01-01
      相关资源
      最近更新 更多