ES6的 promise(二) 静态方法


promise的静态方法(6个)

一.  resolve、reject方法

1. Promise.resolve(v=任何值) 返回一个Promise实例,状态成功,值就是v

2. Promise.reject(e=任何值) 返回一个Promise实例,状态失败,值就是e

注意:和对象里函数参数的resolve/reject没有关系

二.  all、any、race、allSettled方法

1. Promise.all(); 全部

①   和Array.prototype.every的概念类似

②   返回的promise是否成功如何判断?

参数数组里每一个元素怒都是成功的,则成功;成功时执行时间同最慢的数组元素

参数数组里任何一个元素失败,则失败,失败时执行时间同最快失败的元素

2.Promise.race(); 比赛,赛跑

promise成功或失败的条件:

数组里最快改变状态的promise,就会影响Promise.race状态改变

成功或失败的时间是最快改变状态的那个promise

成功返回成功的promise的值

失败返回失败的promise的值

3. Promise.any(); 任何一个

和Array.prototype.some类似

和Promise.all的功能完全相反

promise成功或失败的条件:

数组里任意一个promise成功,则Promise.any结果就是成功的

数组里所有的promise都失败,则Promise.any的结果才是失败

成功花费的时间是最快的promise时间;

失败花费的时间是最慢的promise时间

成功返回成功的promise值

失败返回的是聚合的数据

4. Promise.allSettled(); 所有都完结

promise成功或失败的条件:

不会失败;

成功:数组里的promise实例全部改变状态就成功

成功花费的时间是最慢改变状态的promise时间

成功返回promise实例都改变的数组[{status:’ fullfilled’,value},{status:’ fullfilled’,value},{status:’ fullfilled’,value}]

5. Promise的all、any、race、allSettled方法共同点

①   4个函数的参数都一样,都是一个参数,并且这个参数数组;数组的内容:Promise实例的数组[p1,p2,p3,...,pn]

数组也可以是普通的值或对象:[1,’s’,false,null,{x:1}];语言会自动把不是promise实例的数组元素转化为promise实例;

例如:Promise.resolve(false);

②   4个函数返回值都是新的promise实例

例子1 (Promise.resolve):

let p1 = Promise.resolve(1);
//fullfilled状态的promise实例值1
console.log(p1);// Promise{: 1}

例子2 (Promise.reject):

let p2 = Promise.reject(2);
// rejected状态的promise,值2
console.log(p2);//Uncaught (in promise) 2

例子3 (Promise.all):

function delay(ms){
    return new Promise((resolve,reject) => {
        setTimeout(resolve,ms);
    })
}
let begin = Date.now();//定时
let p3 = Promise.all([
delay(3000).then(() => {Promise.resolve(3);}),
delay(2000).then(() => Promise.resolve(2)),
delay(4000).then(() => Promise.resolve(1))
]).then(v => {
console.log('成功用时:',date.now()-begin);
console.log(v);/*成功[Promise实例成功状态]*/
}).catch(e => {
console.log('p3','失败用时:',
Date.now()-begin);
 console.log('p3',e);//失败的promise
})

console.log(p3);