感谢您阅读本文.

我真的很难完全理解Javascript中异步编程的工作原理.

Promise.resolve().then(randomcallback)

因此,在这种情况下,我认为会发生以下情况:首先,在正常的调用堆栈中,promise .resolve()函数将立即解析Promise对象并返回它.然后.然后()函数判断promise 是否已解析,如果已解析,则将随机回调函数添加到微任务队列中,当调用堆栈为空时,将执行该队列并返回一个新的promise 对象.

对于async await也是一样,await关键字是否只是在promise 得到解决时联系一些web api来侦听?如果是这样的话,如果promise对象在开始时就已经解析了(其中没有settimeout),它还会这样做吗

randomunresolvedpromise.then(randomcallback)

假设RandomUnsolvedPromise在3秒内完成(当调用堆栈为空时)

我看了很多视频,读了很多文章,但在使用Promises和async and Wait时,它们似乎并没有触及事件循环中真正发生的事情.

推荐答案

then函数如何在Promise对象解析时进行判断?

没有.then方法将回调放在promise的实现回调列表中,然后它的工作就完成了.稍后,当promise 实现时,是that代码(实现promise )将对promise 实现回调的调用放入微任务队列中.(你是对的,但当then被调用时,当promise 已经实现时,then才起作用.)

await也是这样,因为await只是then的语法糖.(不过,"只是"跳过了lot个细节.:-D)


旁注:你会注意到我说的是"履行回调",而不是"解决回调",并提到promise 是fulfilled(不是resolved)."已完成"和"已解决"之间有很大的区别,但遗憾的是,人们对"已解决"的理解不太清楚,人们用"解决"来表示"完成"lot.请参阅my blog post here(MDN人员将其与their documentation联系起来)了解差异(以及它的重要性).(也就是说,如果你说"用X来解决promise ",而X不是promise 或其他thenable,那基本上就是"用X来履行promise "的同义词.当X是promise 或其他能力时,这是不正确的.)

Javascript相关问答推荐

使用脚本标签时的JSDoc智能感知

如何使用3个部件之间的路由?

基于每个索引迭代嵌套对象

如何访问Json返回的ASP.NET Core 6中的导航图像属性

如何避免移动设备中出现虚假调整大小事件?

Redux工具包查询(RTKQ)端点无效并重新验证多次触发

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

Google图表时间轴—更改hAxis文本 colored颜色

Angular material 拖放堆叠的牌副,悬停时自动展开&

在带有背景图像和圆形的div中添加长方体阴影时的重影线

使用LocaleCompare()进行排序时,首先使用大写字母

变量的值在Reaction组件中的Try-Catch语句之外丢失

如何修复我的数据表,以使stateSave正常工作?

更新动态数据中对象或数组中的所有值字符串

Web Crypto API解密失败,RSA-OAEP

无法避免UV:flat的插值:非法使用保留字"

Phaserjs-创建带有层纹理的精灵层以自定义外观

如何为仅有数据可用的点显示X轴标签?

如何通过Axios在GraphQL查询中发送数组

React Refs不与高阶组件(HOC)中的动态生成组件一起工作