// 用于超时一个Promise的工具
function timeoutPromise(delay) {
return new Promise( function(resolve, reject) {
setTimeout(function(){
reject('Timeout');
}, delay);
});
}
// polyfill安全的guard检查,保证Promise不会被意外默默忽略
if (!Promise.observe) {
Promise.observe = function(pr, cb) {
pr.then({
function fulfilled(msg) {
// 安排异步回调
Promise.resolve(msg).then(cb);
},
function rejected(err) {
// 安排异步回调
Promise.resolve(err).then(cb);
}
});
// 返回最初的Promise
return pr;
};
}
// 如何使用
Promise.race([
Promise.observe(promiseFun(), function cleanUp(msg) {
// 在foo()之后清理,即使它没有在超时之前完成
}),
timeoutPromise(3000) // 给它3秒钟
])