Я использую модуль Q для Node.js, пытаясь избежать «пирамиды гибели» в сценариях, где у меня много шагов. Например:
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 ). Однако у меня возникает проблема, когда мне нужно преждевременно прервать цепочку задач -. Например, если результат1 успешно возвращен, я мог бы захотеть вызвать обратный вызов раньше и прервать остальные, но мои попытки сделать это терпят неудачу...
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...".
Я уверен, что просто неправильно понимаю некоторые основные принципы, поэтому буду признателен за любую помощь. Спасибо!