面试题答案
一键面试Promise 的状态
- Pending(进行中):初始状态,既不是成功,也不是失败状态。
- Fulfilled(已成功):意味着操作成功完成,此时会有一个 resolved 的值。
- Rejected(已失败):意味着操作失败,此时会有一个 rejection 的原因。
在 JavaScript 中使用 Promise 处理异步操作
- 创建 Promise:通过
new Promise((resolve, reject) => { /* 异步操作 */ })
语法创建一个 Promise 实例。在执行器函数中,进行异步操作,如果操作成功,调用resolve
并传入结果;如果操作失败,调用reject
并传入错误信息。 - 处理 Promise:使用
.then()
方法处理成功的情况,.catch()
方法处理失败的情况。.then()
方法接受一个回调函数,该函数的参数是 Promise 成功时resolve
的值;.catch()
方法接受一个回调函数,该函数的参数是 Promise 失败时reject
的值。
用 Promise 实现两个异步任务,第二个任务依赖第一个任务的结果
// 模拟第一个异步任务
function asyncTask1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const result = 42; // 模拟成功结果
resolve(result);
}, 1000);
});
}
// 模拟第二个异步任务,依赖第一个任务的结果
function asyncTask2(result1) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const newResult = result1 * 2; // 基于第一个任务结果进行操作
resolve(newResult);
}, 1000);
});
}
asyncTask1()
.then(result1 => {
return asyncTask2(result1);
})
.then(finalResult => {
console.log('最终结果:', finalResult);
})
.catch(error => {
console.error('发生错误:', error);
});
在上述代码中:
asyncTask1
模拟了第一个异步任务,在 1 秒后resolve
出一个结果。asyncTask2
模拟了第二个异步任务,依赖asyncTask1
的结果,在 1 秒后resolve
出基于第一个任务结果计算后的新结果。- 通过链式调用
.then()
方法,先执行asyncTask1
,然后将asyncTask1
的结果传入asyncTask2
并执行,最后处理最终结果。如果任何一个 Promise 被reject
,.catch()
方法会捕获错误并处理。