Q - 链接同步的承诺,处理成功和失败
问题描述:
这应该是简单的,我希望..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);
};
如何包括在我的柴N +尝试了几种不同的方式,但我似乎无法按照我的预期调用promisePrinter
fn。
TIA!
答
正如评论中指出的那样,如果要将其放入给定步骤中,则可以使用promisePrinter(main())
或return promisePrinter(augmentsAndReturnsTheData(data1))
。有关于承诺样机这样做没有什么特别的方法,像有是then
或catch
或finally
,因为你在这里做一个非常独特的操作:
- 如果承诺履行(异步回),您登录成功,然后
return
通过。 - 如果承诺拒绝(异步抛出),则记录错误,然后
return
从该错误中恢复。 (如果你想向前传递错误,你会重新抛出。)
现有finally
是那种你想要什么,但并不真正适合,因为它传递的错误以后(如同步finally
)和没有值或错误(如同步finally
)。
你期待什么? promisePrinter(主());应该吐出成功或失败。 – 2013-04-08 13:07:24
我曾希望将promisePrinter添加到反对将承诺传递给它的链中。这样我就可以将它粘在承诺流程 – 2013-04-08 13:19:38
中的任何位置,你可以将每个阶段包装在promisePrinter中,即{return promisePrinter(augmentsAndReturnsTheData(data1)); } – 2013-04-08 13:32:11