【发布时间】:2017-12-07 17:09:35
【问题描述】:
promise 如何在赋予同步效果的同时仍然保持异步?
I.e Promises 可以使代码顺序执行,那不是取消异步吗?
那么,node.js 的意义何在?
【问题讨论】:
标签: node.js asynchronous promise synchronous
promise 如何在赋予同步效果的同时仍然保持异步?
I.e Promises 可以使代码顺序执行,那不是取消异步吗?
那么,node.js 的意义何在?
【问题讨论】:
标签: node.js asynchronous promise synchronous
不,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),然后该代码可以再次调用您的代码(例如您暂停的异步函数)并运行它。
【讨论】:
async/await 建立在 Promise 之上,当您使用 async/await 时,您 正在 使用 Promise :)