在提供同步效果的同时,promises如何保持异步?
I.e Promise可以执行顺序代码,不会删除异步吗?
那么,什么是node.js?
答案 0 :(得分:3)
不,承诺不会使Node.js代码同步运行 - promises允许您编写出现同步的流。
执行此操作时:
console.log(1);
setTimeout(() => console.log(2));
console.log(3);
Node.js在顺序运行代码,首先它记录1,然后它注册一个在超时后发生的函数,然后它记录3.当计时器触发一个大的时候 - 它执行它的功能并记录2.没有线程参与其中。
使用promises和async await,当你await
时,你明确地告诉Node.js"暂停执行这个功能,并在我等待解决的承诺时继续#34;" 。 pause executing
与线程阻塞不同 - 在操作系统级别没有发生上下文切换 - 它只是跟踪功能,当promise解析时它会调用它。
节点使用"我们的代码 - 平台代码"循环,你的代码运行(直到它结束,例如通过点击await),然后平台代码运行(例如,检查定时器和I / O)然后该代码可以调用你的代码(例如你的暂停异步函数)再次运行它。