1.Promise.resolve方法能将现有的任何对象转换成promise对象
let p = Promise.resolve('foo');
let p = new Promise(resolve=>resolve('foo'));
p.then((data)=>{
console.log(data);
})
2.Promise.all方法:异步操作都完成,才会去执行某个操作
应用场景
- 一些游戏类的素材比较多,等待图片、flash、静态资源文件 都加载完成 才进行页面的初始化
let promise1 = new Promise((resolve, reject) => {resolve(1)});
let promise2 = new Promise((resolve, reject) => {resolve(2)});
let promise3 = new Promise((resolve, reject) => {resolve(3)});
let p4 = Promise.all([promise1, promise2, promise3])
p4.then((res)=>{
console.log(res);
}).catch(err=>{
console.log(err);
})
- promise1,promise2,promise3请求全都成功了之后,才会算成功。
3.Promise.race方法:某个异步请求设置超时时间,并且在超时后执行相应的操作
function requestImg(imgSrc) {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = function () {
resolve(img);
}
img.src = imgSrc;
});
}
function timeout() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('图片请求超时'));
}, 3000);
})
}
Promise.race([requestImg('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1566364222518&di=b3c6d411bb23f17d1798fc6be3325ad5&imgtype=0&src=http%3A%2F%2Fpic.k73.com%2Fup%2Fsoft%2F2016%2F0102%2F092635_44907394.jpg'),timeout()]).then(data=>{
console.log(data);
document.body.appendChild(data);
}).catch(err=>{
console.log(err);
});
- 如果3秒内请求回包了,那么就将data图片数据插入到body上;如果超时了没有回包数据,那么就走的是catch,打印出“图片请求超时”