Promise方法
Promise.all()
【谁跑的慢以谁为准】执行回调,此时返回值组成一个数组,传递给回调函数 只要其中一个被rejected,状态就变成rejected,第一个rejected的实例的返回值会传递给回调函数
const p1 = new Promise((resolve, reject) => {
resolve('hello');
})
.then(result => result)
.catch(e => e);
const p2 = new Promise((resolve, reject) => {
throw new Error('报错了');
})
.then(result => result)
.catch(e => e);
// 若作为参数的Promise实例自己定义了catch方法,
//若它一旦被rejected就不会再出发Promise.all()的catch方法
Promise.all([p1,p2])
.then( result=>console.log(result) )
.catch( e=>console.log(e)
// ["hello", Error: 报错了] )
Promise.race()
【谁跑得快以谁为准】只要其中一个实例先改变状态,状态就跟着改变将率先改变的Promise返回值传递给回调函数
const p = Promise.race([ fetch('/resource-that-may-take-a-while'),
new Promise(function (resolve, reject) {
setTimeout(() => reject(new Error('request timeout')), 5000)
})
]);
p
.then(console.log)
.catch(console.error);
Promise.reject()
Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected
const p = Promise.reject('出错了');
// 等同于
const p = new Promise((resolve, reject) => reject('出错了'))
p
.then(null, function (s) {
console.log(s) // 出错了
});
Promise.resolve()
Promise.resolve(),将现有对象转为 Promise 对象
Promise.resolve('foo')
// 等价于
new Promise(resolve => resolve('foo'))
Promise.try()
不知道或不想区分,函数是同步还是异步操作,但是想用Promise来处理
// 一:
const f = () => console.log('now');
Promise.resolve().then(f);
console.log('next')
// next now
// 二:让同步函数同步执行,异步函数异步执行
const f = () => console.log('now')
(async () => f())();
console.log('next');
// now next
const f = () => console.log('now');
( ()=>new Promise( resolve => resolve(f()) ) )();
console.log('next')
// now next
const f = () => console.log('now');
Promise.try(f);
console.log('next')