Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在节点中等待解析承诺时会发生什么 const fetchPromise=fetch('example.com')//解析需要1秒 ... ... // 做3秒钟的工作 ... const response=wait fetchPromise//2-3秒之间的承诺会发生什么?_Javascript_Node.js_V8 - Fatal编程技术网

Javascript 在节点中等待解析承诺时会发生什么 const fetchPromise=fetch('example.com')//解析需要1秒 ... ... // 做3秒钟的工作 ... const response=wait fetchPromise//2-3秒之间的承诺会发生什么?

Javascript 在节点中等待解析承诺时会发生什么 const fetchPromise=fetch('example.com')//解析需要1秒 ... ... // 做3秒钟的工作 ... const response=wait fetchPromise//2-3秒之间的承诺会发生什么?,javascript,node.js,v8,Javascript,Node.js,V8,在您解决承诺之前,承诺响应会发生什么情况 在上面的示例中,如果程序的调用堆栈中有项,但您没有兑现承诺,那么在这2秒内fetch响应会发生什么情况?Node是否为已完成但未解决的承诺提供了某种缓存?关于事件循环有一个很好的解读 在高级透视图中,有一个永远运行的循环,以动作列表的形式侦听事件,并一次处理一个事件 由于nodejs的单线程设计,您上面共享的代码无法全局使用。nodejs所做的是,每次调用函数时,它都会被推入队列并进行处理。在每一个滴答声中,你们都会从队列中弹出一些东西,然后运行它或推送

在您解决承诺之前,承诺响应会发生什么情况

在上面的示例中,如果程序的调用堆栈中有项,但您没有兑现承诺,那么在这2秒内fetch响应会发生什么情况?Node是否为已完成但未解决的承诺提供了某种缓存?

关于事件循环有一个很好的解读

在高级透视图中,有一个永远运行的循环,以动作列表的形式侦听事件,并一次处理一个事件

由于nodejs的单线程设计,您上面共享的代码无法全局使用。nodejs所做的是,每次调用函数时,它都会被推入队列并进行处理。在每一个滴答声中,你们都会从队列中弹出一些东西,然后运行它或推送一些新的东西

在js世界中,没有两个东西可以同时运行。如果运行长时间运行的js代码,它会阻塞整个系统,因此系统不会响应新事件,因为eventloop被阻塞

也就是说,当您运行所有这些非阻塞函数时,情况还有另一面,它们是在v8 js引擎中幕后处理的。由于v8本机代码,它可以使用诸如多个线程之类的东西,等待事情完成或轮询事情,检查它们是否准备就绪,以及一条新消息是否已准备就绪,并将其插入js事件循环中,您可以访问js world中的数据

因此,在异步函数中,当您调用wait时,返回到您的问题,它实际上只是意味着您将执行让给消息队列中等待的其他东西,一旦您等待的东西准备好了,它将被推回到队列中,您将从您离开的地方继续


在中没有真正的等待,等待的要点不是用阻塞本机函数阻塞事件循环,并将执行交给其他对象,而异步函数最终返回的承诺只有在使用
时才有意义。然后
并添加一个回调,在数据丢失时传递回js world准备就绪。

实际上,在等待承诺期间,您的程序在调用堆栈中没有任何项。我不确定“已完成但未解决的承诺”是什么意思。实际上,
async
/
await
只是
的糖分。然后,
调用和承诺(大部分)只是回调的巧妙包装。您了解node.js事件处理的一般工作原理吗?如果将回调传递给
fetch
,您能否回答您的问题?@Bergi Ok。当我从回调的角度考虑它时,它更有意义。上面的代码就是fetch('example.com',函数(response){…3秒工作…})No,它不会。它将是
fetch('example.com',function(response){})。。。3秒工作…
只有等待后的代码才会进入回调。