这应该很简单,我希望......
我知道如何进行基本的承诺链接:
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!
答案 0 :(得分:0)
如评论中所述,如果您想将其置于给定步骤中,则执行此操作的方法为promisePrinter(main())
或return promisePrinter(augmentsAndReturnsTheData(data1))
。在promise原型上执行此操作没有特殊方法,例如then
或catch
或finally
,因为您在这里执行了一项非常独特的操作:
return
通过。return
从该错误中恢复。 (如果你想向前传递错误,你会重新抛出它。)现有的finally
是你想要的,但并不适合,因为它向前传递错误(如同步finally
)并且没有取值或错误(如同步finally
)。