function asyncOperation1() {
return new Promise((resolve, reject) => {
setTimeout(() => {
Math.random() > 0.5? resolve('操作1结果') : reject('操作1错误');
}, 1000);
});
}
function asyncOperation2(result1) {
return new Promise((resolve, reject) => {
setTimeout(() => {
Math.random() > 0.5? resolve(result1 + ' -> 操作2结果') : reject('操作2错误');
}, 1000);
});
}
function asyncOperation3(result2) {
return new Promise((resolve, reject) => {
setTimeout(() => {
Math.random() > 0.5? resolve(result2 + ' -> 操作3结果') : reject('操作3错误');
}, 1000);
});
}
asyncOperation1()
.then(result1 => asyncOperation2(result1))
.then(result2 => asyncOperation3(result2))
.then(finalResult => {
console.log(finalResult);
})
.catch(error => {
console.error('捕获到错误:', error);
});
使用Promise特性管理异步流程和错误处理的阐述
- 链式调用:Promise 通过
.then()
方法实现链式调用,使得异步操作可以按顺序执行,并且每个 .then()
方法返回一个新的 Promise,这样就可以方便地将多个异步操作串联起来。在上述代码中,asyncOperation1()
的结果作为参数传递给 asyncOperation2()
,asyncOperation2()
的结果又作为参数传递给 asyncOperation3()
,实现了异步任务的序列执行。
- 错误处理:Promise 的
.catch()
方法用于捕获整个 Promise 链中任何一个环节抛出的错误。只要 Promise 链中有一个 Promise 被 reject,后续的 .then()
方法就不会被执行,而是直接跳转到最近的 .catch()
方法进行错误处理。这样可以集中处理异步操作中可能出现的各种错误,避免了层层嵌套的错误处理代码,使代码结构更加清晰。