Promise.prototype.done

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 有如下两个特色

一、done 中出现的错误会被做为异常抛出
二、终结 Promise chainprototype