【问题标题】:How is NodeJS notified of resolved Promises?NodeJS 如何通知已解决的 Promise?
【发布时间】:2020-11-03 00:24:17
【问题描述】:

我已阅读有关事件循环的 NodeJS 文档: https://nodejs.dev/learn/the-nodejs-event-loop

我知道像 API 调用或 setTimeout 之类的函数有自己的线程来解析它们,但是 NodeJS 如何通知该解析以将 setTimeout 回调放置在消息队列中,或者将 promise 回调放回调用堆栈中?

Node 是否在调用堆栈中的每个函数执行后检查其作业队列?

【问题讨论】:

    标签: node.js


    【解决方案1】:

    高度简化...

    想象一下,有一系列已解决的承诺。每次 Promise 解析时,它都会被推送到这个数组上。

    当没有代码运行时,节点检查这个数组并运行所有相关的回调。

    【讨论】:

    • 节点本身是否将已解决的承诺推送到该“数组”中?它不是专注于主调用堆栈吗?还是在节点和 API 之间打开了某种其他连接?
    • Node 不是必须的。解决 promise 的 thing (例如完成的操作)可以注册回调。这条线有点模糊节点和 V8 的作用。最终触发此事件的是传递给new Promise() 的第一个构造函数参数的回调。现实更复杂一些,但这是一个足够好的近似值。
    • 所以简而言之,new Promise 的第一个参数是一个回调。当它被调用时,会为循环的下一次迭代安排一个微任务。
    猜你喜欢
    • 2021-05-26
    • 2014-10-15
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    相关资源
    最近更新 更多