私は多くのステップがあるシナリオで "雲のピラミッド"を避けるためにNode.jsにthe Q moduleを使用しています。例:Qを使用してnode.js promise chainを正しく終了するにはどうすればよいですか?
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を実行中...」と表示されます。
私はここでいくつかの基本原則を誤解していると思いますので、助けていただければ幸いです。ありがとう!
一つの解決策は、最初の鎖が壊れるかもしれませんした後、別の約束チェーンを作成することです)(の.doneに変更されました。上の例より、result2の.thenステートメントは、元の約束にアタッチされるのではなく、step2のQ.ncallにアタッチされます。しかし、ここでの主な欠点は、私の意見ではQの主な利点の1つを取り除くことです:運命のピラミッドを避ける!それはまったく何の約束よりも良いですが、私は解決策が嫌いです... –