promise设计规格并没有对 Promise.prototype.done做出任何规定,因此在使用的时候,你可以使用已有类库提供的实现,也可以自己去实现。
作用
无论Promise对象的回调链以then方法还是catch结尾,只要最后一个方法抛出错误,就有可能无法捕捉到(因为Promise内部的错误不会冒泡到全局),因此,需要提供一个done方法,它总是处于回调链的尾端(被执行),保证抛出任何可能出现的错误;
示例代码
"use strict";
if (typeof Promise.prototype.done === "undefined") {
Promise.prototype.done = function (onFulfilled, onRejected) {
this.then(onFulfilled, onRejected).catch(function (error) {
setTimeout(function () {
throw error;
}, 0);
});
};
}
done 有以下两个特点
1、done 中出现的错误会被作为异常抛出
2、终结 Promise chain
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。