1

これは簡単なはずです..

私は基本的な約束連鎖を行う方法を知っています:

main = function() {
  returnsAPromise().then(function(data1) {
    return augmentsAndReturnsTheData(data1);
  }).then(function(data2) {
    doesSomethingMeaningfulWithTheData(data2);
  });
};

ただし、成功と失敗の両方を処理できるデータを最終的に処理する前に、次のようなある種のインターセプターを追加したいとします。

promisePrinter = function(promise) {
  var bad, good;

  good = function(data) {
    console.log(['Success', data]);
    return data;
  };
  bad = function(data) {
    console.log(['Failure', data]);
    return data;
  };
  return promise.then(good, bad);
};

それをチェーンに含めるにはどうすればよいですか?promisePrinterいくつかの異なる方法を試しましたが、期待どおりに fn を呼び出すことができないようです。

ティア!

4

1 に答える 1

0

コメントに記載されているように、これを行う方法はpromisePrinter(main())、またはreturn promisePrinter(augmentsAndReturnsTheData(data1))特定のステップ内に配置する場合です。ここでは非常にユニークな操作を行っているため、 forthenまたはcatchまたはのように、promise プロトタイプでこれを行うための特別な方法はありません。finally

  • promise が満たされた場合 (非同期リターン)、成功をログに記録returnしてからパススルーします。
  • promise が拒否された場合 (非同期スロー)、エラーをログに記録returnし、そのエラーから回復します。(エラーを先に渡したい場合は、再スローします。)

既存finallyのものはあなたが望むもののようなものですが、実際には適合しません。なぜなら、それはエラーを先に渡し ( synchronous のようにfinally)、値やエラーを取りません ( synchronous のようにfinally) からです。

于 2013-10-07T07:28:38.623 に答える