牵袏手Fia 牵袏手Fia
关注数: 24 粉丝数: 23 发帖数: 1,026 关注贴吧数: 11
来大佬 讲解下。 关于异步的问题 现在 在看 <JavaScript高级程序设计(第4版)> 看到 异步函数这里。有一段代码 书上的给到的答案和 浏览器运行出来的不一样。如下: async function foo() {console.log(2);console.log(await Promise.resolve(8));console.log(9);}async function bar() {console.log(4);console.log(await 6);console.log(7);}console.log(1);foo();console.log(3);bar();console.log(5); 书中给出的是 1,2,3,4,5,6,7,8,9. 而我浏览器运行结果是 1,2,3,4,5,8,9,6,7 求解答下。哪错了吗? 书中给出的步骤是这样的 (1) 打印 1; (2) 调用异步函数 foo(); (3)(在 foo()中)打印 2; (4)(在 foo()中)await 关键字暂停执行,向消息队列中添加一个期约在落定之后执行的任务; (5) 期约立即落定,把给 await 提供值的任务添加到消息队列; (6) foo()退出; (7) 打印 3; (8) 调用异步函数 bar(); (9)(在 bar()中)打印 4; (10)(在 bar()中)await 关键字暂停执行,为立即可用的值 6 向消息队列中添加一个任务; (11) bar()退出; (12) 打印 5; (13) 顶级线程执行完毕; (14) JavaScript 运行时从消息队列中取出解决 await 期约的处理程序,并将解决的值 8 提供给它; (15) JavaScript 运行时向消息队列中添加一个恢复执行 foo()函数的任务; (16) JavaScript 运行时从消息队列中取出恢复执行 bar()的任务及值 6; (17)(在 bar()中)恢复执行,await 取得值 6; (18)(在 bar()中)打印 6; (19)(在 bar()中)打印 7; (20) bar()返回; (21) 异步任务完成,JavaScript 从消息队列中取出恢复执行 foo()的任务及值 8; (22)(在 foo()中)打印 8; (23)(在 foo()中)打印 9; (24) foo()返回。
1 下一页