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);