如何用定时器模拟异步长进程并保证执行顺序?
解决异步进程顺序执行问题
修正单个异步函数
你遇到的核心问题是**setTimeout的回调无法作为async函数的返回值**,原函数会直接返回一个状态为resolved、值为undefined的Promise,导致then提前执行。正确的做法是将setTimeout逻辑包装在Promise中,手动控制异步操作的完成时机:
function someLongProcess(myInfoStr) { return new Promise((resolve) => { console.log(myInfoStr + ": Process Starting"); setTimeout(() => { console.log(myInfoStr + ": Process Finishing"); // 异步操作完成后,通过resolve传递结果 resolve(myInfoStr + ": Process Finished"); }, 1000); }); } // 调用验证 someLongProcess("Test A").then( value => console.log(value), error => console.log("Oh oh!: " + error) );
执行后会按你期望的顺序输出:
Test A: Process StartingTest A: Process FinishingTest A: Process Finished
实现多进程顺序执行
如果要依次启动多个测试进程,用async/await可以更直观地控制顺序:
async function runTestsSequentially() { // 前一个进程完成后,再启动下一个 await someLongProcess("Test A"); await someLongProcess("Test B"); await someLongProcess("Test C"); } runTestsSequentially();
这样每个进程都会等待前一个完全结束后才开始执行。
内容的提问来源于stack exchange,提问作者Mark Seagoe
相关产品推荐
相关产品推荐

