异步步骤,等待所有步骤成功或失败

问题描述:

我有一个服务器端Node.JS脚本来处理文件上传(1)将上传保存到特定位置和(2)将其记录在数据库中。我一直在使用Asynquence库和它的门函数(相当于Promise.all)来并行执行这些步骤,但是我需要序列的行为,以便如果任一步失败,如果成功,则撤销另一步。显然,撤销步骤只有在其匹配步骤已经成功时才会执行(即删除文件或db记录)异步步骤,等待所有步骤成功或失败

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

+0

除了表现,你会发现按顺序进行两个阶段会更简单。因此,如果第一阶段失败了,则不需要撤销任何东西;如果第二阶段失败了,只有第一阶段需要撤消。 –

如果您认为catch作为异步对口try,那么你可以建立一个快速的包装,包装传递给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 }; 
    }); 
    })); 
} 

作为奖励,因为你可以把每个承诺任何行动,你的包装,你甚至可以通过一个单独的渠道迅速及时报告故障,或者立即开始取消或回滚成功的行动为任何异步步骤失败。