Używam the Q module dla Node.js w celu uniknięcia "piramidy losu" w scenariuszach, w których mam wiele kroków. Na przykład:Jak prawidłowo przerwać obietnicę łańcucha node.js za pomocą 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();
}
Zasadniczo to wydaje się działać; jeśli błąd zostanie zgłoszony przez któryś z kroków zadania, jest on przekazywany do wywołania zwrotnego (chociaż byłbym mile widziany w ulepszeniach, ponieważ jestem nowy dla obietnicy node.js). Jednak mam problem, gdy trzeba wcześniej przerwać łańcuch zadań. Na przykład, jeśli wynik1 powodzeniem powrócił może chcę wywołać zwrotnego wcześnie i przerwać odpoczynek, ale moje próby, aby to zrobić nie udaje ...
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();
}
W tym przykładzie, widzę jak „przerwanie” i "wykonano krok 3 ..." wydrukowane.
Jestem pewna, że po prostu nie rozumiem podstawowych zasad tutaj, więc doceniam każdą pomoc. Dzięki!
Jednym rozwiązaniem znalazłem jest utworzenie osobnego łańcuch obietnica po pierwszym łańcuch może pęknąć. Niż w powyższym przykładzie instrukcja .ten z wynikiem 2 zostaje dołączona do Q.ncall dla kroku 2, zamiast dołączania do pierwotnej obietnicy. JEDNAKOLWIEK, główną wadą jest to, że pozbywa się jednej z głównych korzyści dla Q w mojej opinii: unikając piramidy zagłady! To wciąż lepsze niż żadne obietnice, ale nie podoba mi się rozwiązanie ... –