我正在使用Node.js的 Q 模块,试图在我有很多步骤的情况下避免“厄运金字塔”。例如:
function doTask(task, callback)
{
Q.ncall(task.step1, task)
.then(function(result1){
return Q.ncall(task.step2, task);
})
.then(function(result2){
return Q.ncall(task.step3, task);
})
.fail(callback).end();
}
本质上这似乎有效;如果任何任务步骤引发错误,则将其传递给回调(尽管我欢迎改进,因为我是 node.js 承诺的新手)。但是,当我需要提前中止任务链时,我遇到了问题。例如,如果 result1 成功返回,我可能想提前调用回调并中止其余的,但我这样做的尝试失败了......
function doTask(task, callback)
{
Q.ncall(task.step1, task)
.then(function(result1){
if(result1)
{// the rest of the task chain is unnecessary
console.log('aborting!');
callback(null, result1);
return null;
}
return Q.ncall(task.step2, task);
})
.then(function(result2){
console.log('doing step 3...');
return Q.ncall(task.step3, task);
})
.fail(callback).end();
}
在这个例子中,我看到两个“正在中止!” 并打印“正在执行第 3 步...”。
我敢肯定,我只是在这里误解了一些基本原则,因此不胜感激。谢谢!