【问题标题】:Does using promises in node.js make node synchronous?在 node.js 中使用 Promise 是否会使节点同步?
【发布时间】:2017-12-07 17:09:35
【问题描述】:

promise 如何在赋予同步效果的同时仍然保持异步?

I.e Promises 可以使代码顺序执行,那不是取消异步吗?

那么,node.js 的意义何在?

【问题讨论】:

    标签: node.js asynchronous promise synchronous


    【解决方案1】:

    不,Promise 不会使 Node.js 代码同步运行 - Promise 允许您编写看起来同步的流。

    当你这样做时:

    console.log(1);
    setTimeout(() => console.log(2));
    console.log(3);
    

    Node.js 连续运行代码,首先它记录 1,然后它注册一个函数以在超时后发生,然后它记录 3。在计时器触发后,它执行它的函数并记录 2。没有线程参与其中。

    使用 Promise 和异步等待,当您 await 时,您明确告诉 Node.js“暂停执行此函数并在我等待的 Promise 解决时继续”。 pause executing 与线程阻塞不同——在操作系统级别不会发生上下文切换——它只是跟踪函数,并在 promise 解决时调用它。

    节点以“我们的代码 - 平台代码”循环运行,您的代码运行(直到它结束,例如通过等待等待),然后平台代码运行(例如,检查计时器和 I/O),然后该代码可以再次调用您的代码(例如您暂停的异步函数)并运行它。

    【讨论】:

    • 是什么决定了我应该使用 Promise 还是异步?
    • async/await 建立在 Promise 之上,当您使用 async/await 时,您 正在 使用 Promise :)
    • 我将如何编写一个具有登录系统 + CRUD db 调用的大型系统。?这意味着我将不得不写很多承诺。请参考使用 Promise 的教程/书籍。
    • @sdfdsfsdf 写很多 Promise 很好,我们在生产中的每台服务器同时有数十万个。
    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2021-11-01
    • 2020-02-10
    • 2012-11-28
    相关资源
    最近更新 更多