1.resolve()方法,reject()方法,all()方法,race()方法都是Promise构造函数的方法
2.Promise.resolve()
-
返回一个成功/失败的 Promise 对象
-
如果传入一个 非 Promise 类型的对象,则返回的结果为成功的 Promise 对象,结果值就是参数值
let p1 = Promise.resolve(521) console.log(p1); // Promise {<fulfilled>: 521}
-
如果传入一个 Promise 类型的对象,则参数的状态就是返回值的状态,参数的结果就是返回值的结果
// 参数是一个成功的Promise
let p2 = Promise.resolve(new Promise((resolve, reject) => {
resolve('ok')
}))
console.log(p2);
// Promise {<fulfilled>: 'ok'}
// 参数是一个失败的Promise
let p3 = Promise.resolve(new Promise((resolve, reject) => {
reject('no ok')
}))
console.log(p3);
// Promise {<rejected>: 'no ok'}
上文 p3 代码如果单独这么写会报错,因为有 Promise失败回调但是我们没有处理
我们用catch去处理错误
p3.catch(reason => {
console.log(reason);
})
// no ok
3.Promise.reject()
-
无论传什么参数都会返回一个失败的 Promise 对象,结果值是就是参数
let p1 = Promise.reject(521)
console.log(p1);
// Promise { <rejected> 521 }
p1.catch(reason => {
console.log(reason);
})
// 521
let p2 = Promise.reject(new Promise((resolve, reject) => {
resolve('ok')
}))
console.log(p2);
// Promise { <rejected> Promise { <resolved> 'ok' } }
p2.catch(reason => {
console.log(reason);
})
// Promise { <resolved> 'ok' }
let p3 = Promise.reject(new Promise((resolve, reject) => {
reject('no ok')
}))
console.log(p3);
// Promise { <rejected> Promise { <rejected> 'no ok' } }
p3.catch(reason => {
console.log(reason);
})
// Promise { <rejected> 'no ok' }
提示:跟resolve()方法不同的是,如果传入的参数是一个Promise对象,resolve()的返回结果就是传入参数的结果,而reject()的返回结果就是参数本身
4.Promise.all()
-
Promise.all(promises)
-
promises: 包含了 n 个 promise 的数组
-
返回一个新的 Promise 对象,只有所有的 Promise 都成功才成功,只要有一个失败旧直接失败
-
成功的结果是所有 promise 成功结果组成的数组,失败结果是数组当中失败的 promise 的失败结果
-
如果不止一个失败,失败结果就是数组中第一个失败的 promise 的失败结果
例1:
let p1 = new Promise((resolve, reject) => {
resolve("ok");
});
let p2 = Promise.resolve("success");
let p3 = Promise.resolve("oh yeah");
const result1 = Promise.all([p1, p2, p3]);
console.log(result1);
// 可以看到在 PromiseResult 能看到这三个结果值
例2:
let p4 = new Promise((resolve, reject) => {
resolve("ok");
});
let p5 = Promise.resolve("success");
let p6 = Promise.reject("oh yeah");
const result2 = Promise.all([p4, p5, p6]);
console.log(result2);
// 可以看到在 PromiseResult 能看到 p6 的结果值
5.Promise.race()
-
Promise.race(promises)
-
promises: 包含了 n 个 promise 的数组
-
返回一个新的 Promise 对象,第一个完成的 promise 的结果状态就是最终的结果状态
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("ok");
}, 1000);
});
let p2 = Promise.resolve("success");
let p3 = Promise.resolve("oh yeah");
const result = Promise.race([p1, p2, p3]);
console.log(result);