首页
注册
登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请
登录
V2EX
›
JJvaryBig
›
全部回复第 1 页 / 共 1 页
回复总数
3
264 天前
回复了
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
·
实用小工具
·
5279 人在线
最高记录 6679
·
Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms ·
UTC 07:52
·
PVG 15:52
·
LAX 23:52
·
JFK 02:52
Developed with
CodeLauncher
♥ Do have faith in what you're doing.