"答案:
const promise1 = new Promise((resolve, reject) => {
console.log('promise1');
setTimeout(() => {
resolve('resolved');
}, 1000);
});
const promise2 = promise1.then((value) => {
console.log(value);
throw new Error('error thrown');
});
const promise3 = promise2.catch((error) => {
console.log(error);
});
promise3.finally(() => {
console.log('finally');
});
执行结果及解释:
promise1
resolved
error thrown
finally
解释:
- 首先,创建一个 Promise 对象
promise1,并在内部使用setTimeout模拟一个异步操作,在 1 秒后将 Promise 状态改为resolved。 - 然后,通过
promise1.then注册一个回调函数,当promise1的状态变为resolved时,打印出resolved,并抛出一个错误。 - 接着,通过
promise2.catch注册一个回调函数,用于捕获上一个回调函数抛出的错误,并打印出错误信息。 - 最后,通过
promise3.finally注册一个回调函数,不管前面的 Promise 是成功还是失败,都会执行这个回调函数。在这里,打印出finally。
综上所述,代码中的 Promise 顺序执行,promise1 先执行,然后是 promise2,接着是 promise3。最后,通过 finally 方法,无论前面的 Promise 是否成功或失败,都会执行 finally 回调函数。"