Asynquence步骤等待所有步骤成功或失败

时间:2017-04-10 12:42:52

标签: javascript promise

我有一个服务器端Node.JS脚本,通过以下方式处理文件上传:(1)将上传保存到特定位置,以及(2)将其记录在数据库中。我一直在使用Asynquence库及其门函数(相当于Promise.all)并行执行这些步骤,但是我需要序列表现如果任一步骤失败,如果成功则撤消另一步骤。显然撤消步骤只能在匹配步骤已经成功时执行(即删除文件或db记录)

Gate似乎不适用于这种情况,因为如果任何步骤失败,它会触发错误处理程序。是否有一个等待所有步骤成功或失败的功能?

1 个答案:

答案 0 :(得分:1)

如果您认为catchtry的异步对应物,那么您可以构建一个快速包装器,它包装传递给gatePromise.all的每个值并返回一个"成功"或者"失败"结果

function waitForAll(inputArray) {
  // Return Promise.all on an array where for each array value...
  return Promise.all(inputArray.map(function(x) 
    // ...we wrap it in a tiny dict with the semantics we want.
    return Promise.resolve(x).then(function(value) {
      return { success: true, value: value };
    }, function(error) {
      return { success: false, error: error };
    });
  }));
}

作为奖励,由于您可以在包装器中执行任何操作,但您甚至可以通过单独的通道快速报告故障,或者在任何异步步骤失败时立即开始取消或回滚成功操作。