2016-06-23 13 views
0

私は約束を解消しようとしていますが、reject('something')の後もすべてthen(methods)が実行され、最後にcatch()となっています。直接catchを実行して、then(methods)をスキップしてはいけません。ノード約束のチェーンブレイク

method1() 
.then(method2()) 
.then(method3()) 
.then(method4()) 
.then(method5()) 
.catch(errohandler()) 


method1(){ 
return new Promise(function (resolve, reject) { 
    if (some condition) { 
     reject(new Error("error")); 
    } else { 
     resolve("correct entity. all parameters present"); 
    } 
    }); 
} 

私の条件が真で、エラーメッセージが後でキャッチブロックに表示されるため、コントロールはifブロックに移動します。しかし、すべての(メソッド)が実行されています。

+3

私は思います問題はあなたがmethod2()を呼び出して... mehod2を関数として入れないことです。 – Alon

答えて

2

コールバックとしてメソッドを渡すことはありませんが、実際にコールバックしてその結果をプロミスチェーンに渡します。それをこれに変更すると、予想される動作をするはずです。

method1() 
.then(method2) 
.then(method3) 
.then(method4) 
.then(method5) 
.catch(errohandler) 

コメントで修正シナリオの後にアップデート:

あなたが周囲の機能のいくつかのパラメータでmethod2を呼び出したいなら、あなたはそのようにそれを行うことができます:

function myFunc(a, b){ 
    method1() 
     .then(function() { method2(a, b); }) 
     // ... other chain elements 
     .catch(errohandler()) 
} 
+0

これは完全なシナリオです。 myFunc(a、b){(方法5(h、i)) 。(方法4(f、g)) .then(方法5(h、i))。キャッチ(errohandler()) } 法1()(いくつかの条件){ が拒否した場合、{)(新しいError( "エラー"){)拒否、 を新たに約束(機能(決意を返し 。 } else { resolve( "正しいエンティティ。すべてのパラメータが存在します"); } }); }関数方法2(B){ にconsole.log(A) //何らかのアクションを行う 新しいプロミス(拒否、解決){// はいくつかのコード 解決(A)。 } } 同様に他の方法も書かれています これを例に説明してください。 –

+0

それは元の質問と同じ問題です。あなたは、あなたの約束を「構築」するときにも、このメソッドを呼び出します。 method2を引数aとbで呼び出す場合は、それを行うpromiseにコールバックを渡す必要があります。私は例で私の答えを編集します – DAXaholic

+0

ありがとう..それは助け:) –