promise使用及其方法
实例方法
- then():用于处理Promise成功状态的回调函数。它接受两个参数,第一个参数是Promise成功时的回调函数,第二个参数是可选的,用于处理Promise失败时的回调函数。then()方法返回一个新的Promise实例,这使得我们可以进行链式调用。
- catch():用于处理Promise失败状态的回调函数。它等同于then(null, failureCallback),通常用于在Promise链的末尾统一处理错误。
- finally():无论Promise是成功还是失败,都会执行的回调函数。它接受一个回调函数作为参数,该函数在Promise状态改变后执行,常用于执行一些清理或收尾工作。
静态方法
- Promise.all():接受一个可迭代对象(通常是一个Promise数组)作为参数,并返回一个新的Promise。当所有给定的Promise都成功解决(resolved)时,新的Promise才会解决,并返回一个包含所有Promise解决值的数组。如果任何一个Promise被拒绝(rejected),Promise.all返回的Promise会立即被拒绝,并返回第一个被拒绝的Promise的原因。
- Promise.allSettled():等待所有的Promise都被settle,无论结果如何。结果数组会是这样的:对成功的响应,结果数组对应元素的内容为{status: "fulfilled", value: result};对出现error的响应,结果数组对应元素的内容为{status: "rejected", reason: error}。
- Promise.race():与Promise.all类似,但只等待第一个settled的Promise并获取其结果(或error)。
- Promise.any():与Promise.race类似,区别在于Promise.any只等待第一个fulfilled的Promise,并将这个fulfilled的Promise返回。如果给出的Promise都rejected,那么返回的Promise会带有AggregateError——一个特殊的error对象,在其errors属性中存储着所有Promise error。
- Promise.resolve():用结果value创建一个resolved的Promise。当一个函数被期望返回一个Promise时,这个方法用于兼容性。
- Promise.reject():用error创建一个rejected的Promise。
实例:
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('第一个任务完成');
}, 2000);
});
const promise2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('第二个任务完成');
}, 1500);
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('a2失败');
}, 2500);
});
// then() 和 catch()
promise1.then((result) => {
console.log('成功回调: ', result);
}).catch((error) => {
console.log('失败回调: ', error);
});
// finally()
promise2.then((result) => {
console.log('成功结果: ', result);
}).finally(() => {
console.log('无论成功或失败都会执行');
});
// promise.all()
Promise.all([promise1, promise2]).then((results) => {
console.log('Promise.all结果: ', results);
}).catch((error) => {
console.log('Promise.all失败: ', error);
});
// Promise.allSettled()
Promise.allSettled([promise2, promise3 ]).then((results) => {
console.log('Promise.allSettled结果: ', results);
});
// Promise.any
Promise.any([promise1, promise2, promise3]).then((result) => {
console.log('Promise.any结果: ', result);
}).catch((error) => {
console.log('Promise.any失败: ', error);
});