异步函数trySwitch在无限循环中无法等待执行完成的问题求助
解决异步函数循环等待问题
你的问题出在同步while循环不会等待异步函数的Promise完成,每次调用trySwitch()后,循环立刻进入下一轮,导致多个异步任务同时运行,输入逻辑混乱。
解决方法很简单:把整个循环逻辑放到一个异步函数里,用await等待trySwitch()执行完成,再根据返回结果决定是否继续循环:
async function trySwitch () { let input = Number(readline.question()) switch (input) { case 1: await insertBooks(); break; case 2: await findBooks(); break; case 3: await updateBooks(); break; case 4: await deleteBooks(); break; default: return false; } return true; } // 新增异步循环函数 async function runLoop() { while (true) { try { const result = await trySwitch(); if (!result) { console.log('...done.'); break; // 返回false时退出循环 } } catch (err) { console.error(err); } } } // 启动循环 runLoop();
关键改动说明:
- 用
async function runLoop()包裹while循环,让循环内部可以使用await语法 - 每次循环都
await trySwitch(),确保上一次的异步操作(包括insertBooks这类函数)完全执行完,才会进入下一轮输入 - 捕获错误的逻辑移到循环内部的
try/catch里,避免单个错误导致整个循环终止 - 当
trySwitch()返回false时,用break退出循环,替代原代码里的return逻辑
这样修改后,循环会严格按照“等待输入→执行对应异步操作→等待操作完成→进入下一轮输入”的顺序执行,不会出现循环不等待的问题。
内容的提问来源于stack exchange,提问作者Anurag Dhote
相关产品推荐
相关产品推荐

