V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  JJvaryBig  ›  全部回复第 1 页 / 共 1 页
回复总数  3
232 天前
回复了 wyc9296 创建的主题 Node.js Promise 和异步回调和我想的不一样
解释执行顺序如下:

调用 myfunc1():

函数 myfunc1() 被调用,它立即返回一个 Promise 对象。这个 Promise 对象会立即开始执行其内部的构造函数提供的异步任务。
执行 Promise 构造函数中的异步任务:

异步任务(即传给 Promise 构造函数的回调函数)开始执行。这里,该任务包含两个嵌套的循环,进行大量的计算工作。
计算过程中,控制台不会有任何输出,因为所有操作都在内存中进行,且由于计算量大,这部分可能耗时较长。
当计算步骤全部完成(即所有循环迭代结束),resolve("my func1") 被调用,将字符串 "my func1" 作为成功的结果传递给 Promise 链。
同步代码继续执行:

在 myfunc1() 返回 Promise 并开始执行异步任务后,JavaScript 引擎继续执行后面的同步代码。
下一行是 console.log(123456),因此立即输出数字 123456 到控制台。
微任务检查点:

当当前执行上下文(如事件循环的一个宏任务)中的所有同步代码执行完毕后,事件循环到达一个检查点,此时会处理待处理的微任务队列。
由于 myfunc1() 返回的 Promise 在之前已执行 resolve(),对应的 .then() 方法被注册为一个微任务,等待执行。
执行 .then() 中的回调:

微任务队列中的第一个任务就是之前注册的 .then() 回调,该回调函数接收 result 参数(即 "my func1")并执行 console.log(result)。
控制台输出字符串 "my func1",这是整个程序中的最后一个操作。
综上所述,代码的执行顺序是:

创建并开始执行 Promise ,其中包含大量计算。
同步输出 123456 到控制台。
计算完成后,Promise 解决,将 "my func1" 放入微任务队列。
事件循环处理微任务,执行 .then() 回调,输出 "my func1" 到控制台。
所以,最终在控制台看到的输出顺序是:
// 123456
// my func1
2022-11-03 09:23:37 +08:00
回复了 jamfer 创建的主题 分享创造 自己一个人创作的「元宇宙」游戏
帅啊,老哥,要是有测试服,可不可以给个内侧权限
2022-07-14 17:53:29 +08:00
回复了 graetdk 创建的主题 分享发现 历时一年,我完成了人生第一场官司,并拿回了租房押金
点赞
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5553 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 08:30 · PVG 16:30 · LAX 00:30 · JFK 03:30
Developed with CodeLauncher
♥ Do have faith in what you're doing.