返回
彻底搞懂 Promise:通过这 5 道难题检验你的理解
前端
2024-01-30 07:26:51
引言:
Promise 是 JavaScript 中处理异步操作的强大工具。它提供了一种机制,使我们能够在操作完成时执行回调函数。通过解决以下这 5 道难题,你可以彻底检验你对 Promise 的理解。
难题 1:解析自身
const promise = Promise.resolve(promise);
当我们解析一个 Promise 对象本身时,会发生什么?
难题 2:解析或拒绝一个 Promise
const promise1 = Promise.resolve('成功');
const promise2 = Promise.reject(new Error('失败'));
promise1 和 promise2 分别解析和拒绝。解释它们的后续行为。
难题 3:then 的链式调用
const promise = Promise.resolve('成功');
promise
.then((result) => {
console.log(result); // 打印 '成功'
})
.then(() => {
console.log('链式调用成功');
});
解释 then 的链式调用的工作原理。
难题 4:多个 Promise 的执行顺序
const promise1 = Promise.resolve('Promise 1');
const promise2 = Promise.resolve('Promise 2');
Promise.all([promise1, promise2]).then((results) => {
console.log(results); // 打印 ['Promise 1', 'Promise 2']
});
当使用 Promise.all 时,多个 Promise 的执行顺序如何?
难题 5:处理异常
const promise = Promise.resolve('成功');
promise
.then(() => {
throw new Error('异常');
})
.catch((error) => {
console.log(error.message); // 打印 '异常'
});
解释 Promise 如何处理异常。
答案:
难题 1:
解析自身会导致无限循环,因为 Promise 会不断解析自身。
难题 2:
promise1 解析后,链中后续的 then 回调函数会被调用。promise2 拒绝后,链中的 catch 回调函数会被调用。
难题 3:
then 方法返回一个新的 Promise,它在当前 Promise 解析后解析。通过链式调用,可以将多个操作串联起来。
难题 4:
使用 Promise.all 时,多个 Promise 会并行执行,但 then 回调函数在所有 Promise 都解析后才被调用。
难题 5:
如果 then 回调函数抛出异常,catch 回调函数会被调用,并传递该异常。
结论:
通过解决这 5 道难题,你已经彻底理解了 Promise 的核心概念。这些知识对于使用 Promise 编写可靠且高效的异步 JavaScript 代码至关重要。