promise设计规格并无对 Promise.prototype.done作出任何规定,所以在使用的时候,你能够使用已有类库提供的实现,也能够本身去实现。promise
不管Promise对象的回调链以then方法仍是catch结尾,只要最后一个方法抛出错误,就有可能没法捕捉到(由于Promise内部的错误不会冒泡到全局),所以,须要提供一个done方法,它老是处于回调链的尾端(被执行),保证抛出任何可能出现的错误;this
"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 中出现的错误会被做为异常抛出
二、终结 Promise chainprototype