Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 处理一系列承诺_Node.js_Promise_Q - Fatal编程技术网

Node.js 处理一系列承诺

Node.js 处理一系列承诺,node.js,promise,q,Node.js,Promise,Q,我有一个将文件上传到服务器并返回承诺的函数。 我想检查每个承诺何时完成,并显示“成功部署文件名…”的日志 我不关心承诺的顺序,但Q.all()对我没有帮助,因为它只在所有承诺都完成时返回,或者在一个承诺失败时快速失败 我想写一些东西,每当我的一个承诺完成并显示日志时进行检查。 由于每个文件都可能很大,我想提醒用户到目前为止上传了什么 当我的其中一个文件失败时,用户将看到如下内容: Successfully deployed file1.txt Successfully deployed file

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

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

我想写一些东西,每当我的一个承诺完成并显示日志时进行检查。 由于每个文件都可能很大,我想提醒用户到目前为止上传了什么

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

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

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


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


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


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


@卡米图尔的答案非常有效。如果您需要fail fast行为(如您在注释中所要求的),您可以在失败时设置一个标志

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

@卡米图尔的答案非常有效。如果您需要fail fast行为(如您在注释中所要求的),您可以在失败时设置一个标志

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

@卡米图尔的答案非常有效。如果您需要fail fast行为(如您在注释中所要求的),您可以在失败时设置一个标志

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

@卡米图尔的答案非常有效。如果您需要fail fast行为(如您在注释中所要求的),您可以在失败时设置一个标志

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

嗯,在测试之后,它并没有给我一个快速失败(也就是说,一旦其中一个文件失败,我想跳过其他承诺),而且我也无法知道什么时候一切都成功完成。你还有其他选择吗?嗯,在测试之后,它不会给我一个快速失败的机会(也就是说,一旦其中一个文件失败,我想跳过其他承诺),而且我也无法知道什么时候一切都成功完成。你还有其他选择吗?嗯,在测试之后,它不会给我一个快速失败的机会(也就是说,一旦其中一个文件失败,我想跳过其他承诺),而且我也无法知道什么时候一切都成功完成。你还有其他选择吗?嗯,在测试之后,它不会给我一个快速失败的机会(也就是说,一旦其中一个文件失败,我想跳过其他承诺),而且我也无法知道什么时候一切都成功完成。你还有别的选择吗?