「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」
Promise.resolve方法
将 Promise 对象的状态从 PENDING 变为 FULFILLED,并执行成功后的注册任务
Promise.reject方法
将 Promise 对象的状态从 PENDING 变为 REJECTED,并执行失败后的注册任务
Promise.then方法
then() 方法返回一个 新的Promise实例 。它最多需要有两个参数:Promise 的成功和失败情况的回调函数,onResolved(fulfilled状态的回调)、onRejected(rejected状态的回调)
在面试过程中经常会被问到promise执行顺序的问题:
// executor是同步执行的
let promise = new Promise((resolve, reject) => {
resolve('承诺实现')
// reject('承诺失败')
// throw new Error('error:承诺失败')
})
// then是异步调用
promise.then((res) => {
console.log('then resolve')
}, (err) => {
console.log('then reject', err)
})
console.log('window')
then是异步调用, reject具有穿透作用: 由于then会返回一个Promise的实例,是可以被链式调用的。
// executor是同步执行的
let promise = new Promise((resolve, reject) => {
// resolve('承诺实现')
// reject('承诺失败')
// 直接抛出一个错误的话,reject和catch也是可以拿到的
throw new Error('error:承诺失败')
})
/**
* @description then返回一个新的Promise实例,then是异步调用
*/
promise.then((res) => {
// 参数res是resolve出来的结果
console.log('then resolve', res);
// 这里还是需要返回一个Promise,后面的then才能继续使用
// return new Promise((resolve, reject) => resolve(res+'111'))
}
// , (res) => {
// // 只返resolve时,这里是不会走的,只会走reject,需要在Promise中reject出数据
// console.log(1, res)
// }
).then((res) => {
// then reject具有穿透作用,如果上一级then的reject对应函数没传的话,这里是可以接收到的
console.log('res', res);
}
, (err) => {
// then里面执行的话,catch中就不会执行
console.log('then reject', err);
}
).catch((err) => {
// 如果前面所有then里面的reject都没有处理的话,错误信息是会走到catch的
console.log('catch', err);
})
Promise.catch 方法
catch方法返回一个新的Promise实例,处理所有异常情况
Promise.all 方法
Promise.all等待所有都完成(或第一个失败)Promise.all()方法接收多个Promise实例,该方法接受一个由Promise对象组成的数组作为参数(参数可以不是数组,但必须具有Iterator接口,且每个成员返回的都是Promise实例)。如果传入的promise中有一个失败(rejected),Promise.all异步地将失败的那个结果给失败状态的回调函数,而不管其它promise是否完成。 Promise.all用于多个异步任务并发运行,他的结果创建承诺之后使用,等待所有任务结果的完成。iterable内部元素传递的是promise对象集合,如果不是promise,直接resolve,Promise.resolve(0 || '123' || true), iterable内部没有元素,返回空数组。 有一个promise是rejected 实例会调 rejected, 失败的原因是第一个失败的promise结果
Promise.race 方法
Promise.race(iterable) 方法返回一个 promise,参数与Promise.all()一样,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝,即将改变状态的promise实例返回值作为Promise.race()方法产生的Promise实例的返回值。
谁先完成就返回哪个promise的结果,而且无论是fullfilled 还是 rejected。 如果可迭代容器为空,返回Promise永远都是pending状态。 多用于测试资源或者接口的响应速度; 速度对比,测试响应速度.