在递归的场景下,通过使用普通的 Promise 实现,可以解决 ASYNC/AWAIT 不能正常工作的问题。具体步骤如下:
Step 1: 定义一个返回 Promise 的函数
例如,定义一个返回 Promise 的异步函数 delay
:
const delay = (time) =>
new Promise((resolve) =>
setTimeout(() => {
console.log(`Delay ${time}ms`);
resolve();
}, time)
);
Step 2: 修改递归函数,使其返回 Promise
例如,将原有的递归函数 recursive
改为返回 Promise:
const recursive = async (num) => {
if (num <= 0) return;
console.log(`Num: ${num}`);
await delay(1000);
await recursive(num - 1);
};
Step 3: 调用递归函数,使用 .then()
处理结果
例如,调用递归函数并使用 .then()
函数处理结果:
recursive(3).then(() => console.log('Done'));
完整代码示例:
const delay = (time) =>
new Promise((resolve) =>
setTimeout(() => {
console.log(`Delay ${time}ms`);
resolve();
}, time)
);
const recursive = async (num) => {
if (num <= 0) return;
console.log(`Num: ${num}`);
await delay(1000);
await recursive(num - 1);
};
recursive(3).then(() => console.log('Done'));