导致回调地狱的代码
function asyncOperation1(callback) {
setTimeout(() => {
console.log('asyncOperation1完成');
callback();
}, 1000);
}
function asyncOperation2(callback) {
setTimeout(() => {
console.log('asyncOperation2完成');
callback();
}, 1000);
}
function asyncOperation3(callback) {
setTimeout(() => {
console.log('asyncOperation3完成');
callback();
}, 1000);
}
asyncOperation1(() => {
asyncOperation2(() => {
asyncOperation3(() => {
console.log('所有操作完成');
});
});
});
优化方法一:使用Promise
function asyncOperation1() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('asyncOperation1完成');
resolve();
}, 1000);
});
}
function asyncOperation2() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('asyncOperation2完成');
resolve();
}, 1000);
});
}
function asyncOperation3() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('asyncOperation3完成');
resolve();
}, 1000);
});
}
asyncOperation1()
.then(() => asyncOperation2())
.then(() => asyncOperation3())
.then(() => console.log('所有操作完成'));
优化方法二:使用async/await
function asyncOperation1() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('asyncOperation1完成');
resolve();
}, 1000);
});
}
function asyncOperation2() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('asyncOperation2完成');
resolve();
}, 1000);
});
}
function asyncOperation3() {
return new Promise((resolve) => {
setTimeout(() => {
console.log('asyncOperation3完成');
resolve();
}, 1000);
});
}
async function main() {
await asyncOperation1();
await asyncOperation2();
await asyncOperation3();
console.log('所有操作完成');
}
main();