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);
};

我如何将它包含在我的链中?尝试了几种不同的方法,但我似乎无法让promisePrinterfn 像我期望的那样被调用。

蒂亚!

4

1 回答 1

0

如评论中所述,执行此操作的方法是promisePrinter(main()),或者return promisePrinter(augmentsAndReturnsTheData(data1))如果您想将其放在给定步骤中。在 Promise 原型上没有执行此操作的特殊方法,例如 for thenor catchor finally,因为您在这里执行了一个非常独特的操作:

  • 如果承诺履行(异步返回),则记录成功,然后return通过。
  • 如果 promise 拒绝(异步抛出),则记录错误,然后return从该错误中恢复。(如果你想继续传递错​​误,你会重新抛出它。)

现有finally的是您想要的,但并不真正适合,因为它会向前传递错误(如 synchronous finally)并且不接受值或错误(如 synchronous finally)。

于 2013-10-07T07:28:38.623 回答