Promise的all方法和race方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。
all方法的效果:「谁跑的慢,以谁为准执行回调」
race方法的效果: 「谁跑的快,以谁为准执行回调」
用race给某个异步请求设置超时时间,并且在超时后执行相应的操作:
//请求某个图片资源
function requestImg(){
var p = new Promise(function(resolve, reject){
var img = new Image();
img.onload = function(){
resolve(img);
}
img.src = 'xxxxxx';
});
return p;
}
//延时函数,用于给请求计时
function timeout(){
var p = new Promise(function(resolve, reject){
setTimeout(function(){
reject('图片请求超时');
}, 5000);
});
return p;
}
Promise
.race([requestImg(), timeout()])
.then(function(results){
console.log(results);
})
.catch(function(reason){
console.log(reason);
});