我正在为我的系统编写一个 API,它将 XHR 发送到服务器并返回一个应由调用者处理的承诺 - 到目前为止一切顺利。
对于每个 API 调用,我必须使用.then
and .catch
调用,但通常(大约 75% 的时间).catch
引用相同的功能,只需使用console.error
.
我的问题是 -有没有办法为我创建的每个承诺附加默认的 catch 语句?(假设打印到控制台),对于我想进一步处理拒绝的每个承诺,我会添加另一个.catch
调用(甚至覆盖它)?
每个调用都有自己的 .catch 的简化示例:http://jsbin.com/waqufapide/edit?js,控制台
尝试实现所需行为的非工作版本:http://jsbin.com/nogidugiso/2/edit?js,控制台
在第二个示例中,不只是返回deferred.promise
,我返回一个带有附件的承诺catch()
处理程序:
return deferred.promise.catch(function (error) {
console.error(error);
});
Both then
抓住并then
在这种情况下会调用函数。
我确实意识到 Q 暴露了getUnhandledReasons()
功能和onerror
事件,但我真的不想使用.done()
对于每个承诺,也没有建立某种计时器/间隔来处理未处理的拒绝列表。
其他库(例如 bluebird 也公开)onPossiblyUnhandledRejection
events,我不得不承认这是一个更好的解决方案,但仍然不是我想要的。