Q - Chaining Sync承诺处理成功和失败

时间:2013-04-04 16:20:00

标签: javascript promise q

这应该很简单,我希望......

我知道如何进行基本的承诺链接:

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。

TIA!

1 个答案:

答案 0 :(得分:0)

如评论中所述,如果您想将其置于给定步骤中,则执行此操作的方法为promisePrinter(main())return promisePrinter(augmentsAndReturnsTheData(data1))。在promise原型上执行此操作没有特殊方法,例如thencatchfinally,因为您在这里执行了一项非常独特的操作:

  • 如果promises满足(异步返回),则记录成功,然后return通过。
  • 如果promise拒绝(异步抛出),则记录错误,然后return从该错误中恢复。 (如果你想向前传递错误,你会重新抛出它。)

现有的finally是你想要的,但并不适合,因为它向前传递错误(如同步finally)并且没有取值或错误(如同步finally)。