ES6精讲13-promise的其他方法

138 阅读1分钟

1.Promise.resolve方法能将现有的任何对象转换成promise对象

//①
let p = Promise.resolve('foo');
//②
let p = new Promise(resolve=>resolve('foo'));
p.then((data)=>{
    console.log(data); //foo
})
  • ①和②表达的是一个意思

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);//🍊[1, 2, 3]
    // 三个都成功  才成功
}).catch(err=>{
  console.log(err);
    // 如果有一个失败 则失败
})
  • promise1,promise2,promise3请求全都成功了之后,才会算成功。

3.Promise.race方法:某个异步请求设置超时时间,并且在超时后执行相应的操作

//1 请求图片资源
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,打印出“图片请求超时”