JavaScript————Promise(二)静态方法

Promise.all( )

promise.all([ promise1 , promise2 , promise3 ]),接收一个数组,元素通常是Promise对象,也可能是其他值并且返回一个promise。
当所有的实例都成功执行之后,才会执行其成功结果。当其中有一个实例失败了,整个Promise.all的结果都会变成失败

let promise1 = new Promise((res,rej) =>{res(100)});
let promise2 = new Promise((res,rej) =>{res(200)});
let promise3 = new Promise((res,rej) =>{res(300)});
Promise.all([promise1,promise2,promise3]).then(res => {
    console.log(res);
}).catch(err => {
    console.log(err);
})

// [100, 200, 300]
const promise11 = Promise.resolve(3);
const promise22 = 42;
const promise33 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise11, promise22, promise33]).then((values) => {
  console.log(values);
});

//  [3, 42, 'foo']

Promise.race()

Promise.race(iterable)方法返回一个promise,一旦迭代器中的某个promise成功或失败,返回的promise就会成功或失败。

const p = Promise.race([p1,p2,p3]);

上面代码中,只要p1,p2,p3中有一个实例率先改变状态,那么p的状态也会跟着改变。也就是说,如果p1率先改变,p1成功,则p1实例的返回值就传递给p。如果p1失败,那么p的状态也会变为rejected。

率先改变的状态为成功

function promiseResolve(val) {
    return new Promise((resolve) =>{
        setTimeout(() => {
            resolve(val);
        },val*1000);
    });
}
function promiseReject(val) {
    return new Promise((reject) =>{
        setTimeout(() => {
            reject(val);
        },val*1000);
    });
}   

console.time("Promise.race");
var promiseArray = [];
promiseArray.push(promiseResolve(4));
promiseArray.push(promiseResolve(3));
promiseArray.push(promiseResolve(2));
promiseArray.push(promiseReject(3));
promiseArray.push(promiseResolve(4));
var promiseRace = Promise.race(promiseArray);
promiseRace.then(function(values) {
    console.timeEnd("Promise.race");
    console.log("率先改变的Promise",values);
});
promiseRace.catch(function(reason) {
    console.timeEnd("promise.race");
    console.log("其中一个promise失败了,原因如下" ,reason);
});

在这里插入图片描述
所有的promise都是并行运行的。通过上面的例子打印的时间我们也可以看到,最快的promise实例需要打印的时间为2s,第三个promise在2s内完成,所以最先改变的就返回给Promise.race。

率先改变的状态为失败

function promiseResolve(val) {
    return new Promise((resolve,reject) =>{
        setTimeout(() => {
            resolve(val);
        },val*1000);
    });
}
function promiseReject(val) {
    return new Promise((resolve,reject) =>{
        setTimeout(() => {
            reject(val);
        },val*1000);
    });
}   

console.time("Promise.race");
var promiseArray = [];
promiseArray.push(promiseResolve(4));
promiseArray.push(promiseResolve(5));
promiseArray.push(promiseResolve(6));
promiseArray.push(promiseReject(3));
promiseArray.push(promiseResolve(4));
var promiseRace = Promise.race(promiseArray);
promiseRace.then(function(values) {
    console.timeEnd("Promise.race");
    console.log("率先状态为resolve的Promise",values);
}).catch(function(reason) {
    console.timeEnd("promise.race");
    console.log("率先状态为reject的promise" ,reason);
});

在这里插入图片描述
所有的promise都是并行运行。第四个promise在3s内完成,所以是最先改变的居返回给promise.race。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值