2

最初の約束が失敗する約束チェーンがありますが、それでも2番目の約束は正常に実行されていますが、期待どおりに失敗するはずです...

プランカーリンク

私がしたことは簡単でした:

dummyPromise().then(success, error).then(success, error);

したがって、最初のエラーが実行された場合、後続のエラーを実行する必要がありますが、得られるものは次のとおりです。

 1. error
 2. success

どうしてこんなことに??

4

3 に答える 3

3

return $q.reject();チェーン内の次の Promise も失敗するためには、Promiseから戻る必要があります。分岐したプランカーを参照してください: http://plnkr.co/edit/porOG8qVg2GkeddzVHu3?p=preview

理由は簡単です。エラー ハンドラーがエラーを修正するためのアクションを実行する可能性があります。したがって、デフォルトで次の promise が失敗することは合理的ではありません。ちなみに、成功$q.reject()ハンドラーからでも、エラー状態を感知した場合は、チェーン内の次の promise が失敗するように返すことができます。

于 2014-07-01T09:44:10.960 に答える
1

これが約束の仕組みです。error -function でエラーを処理します。特に指定がない場合は、解決された新しい promise が返されます。拒否したい場合は、$q.reject(); Have a look at the documentationを返して拒否する必要があります。の例が$q.reject();それをよく説明しています。

promiseB = promiseA.then(function(result) {
  // success: do something and resolve promiseB
  //          with the old or a new result
  return result;
}, function(reason) {
  // error: handle the error if possible and
  //        resolve promiseB with newPromiseOrValue,
  //        otherwise forward the rejection to promiseB
  if (canHandle(reason)) {
   // handle the error and recover
   return newPromiseOrValue;
  }
  return $q.reject(reason);
});
于 2014-07-01T09:50:09.660 に答える