Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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 在express中运行承诺并立即发送响应会阻止任何事情吗?_Javascript_Node.js_Express_Asynchronous - Fatal编程技术网

Javascript 在express中运行承诺并立即发送响应会阻止任何事情吗?

Javascript 在express中运行承诺并立即发送响应会阻止任何事情吗?,javascript,node.js,express,asynchronous,Javascript,Node.js,Express,Asynchronous,我刚刚读了这篇很棒的问答文章,内容是关于async/wait如何不阻塞线程: 在Express.js的上下文中执行此操作时,我想检查一下是否正常 以下代码是否会阻止任何进程和/或在后台表示letrunasynchmethodthattreturnsPromisecomplete: const myEndpoint = async(req, res) => { const users = await DB.getSomeUsers(); users.forEach(user =>

我刚刚读了这篇很棒的问答文章,内容是关于
async
/
wait
如何不阻塞线程:

在Express.js的上下文中执行此操作时,我想检查一下是否正常

以下代码是否会阻止任何进程和/或在后台表示let
runasynchmethodthattreturnsPromise
complete:

const myEndpoint = async(req, res) => {
  const users = await DB.getSomeUsers();
  users.forEach(user => {
    user.runAsyncMethodThatReturnsPromise();
  });

  res.send('Ok');
}

没错,
user.runAsyncMethodThatReturnsPromise()
将在后台运行,不会阻止事件循环:)@Thom因此,当我在express的路由器中运行一个方法时,它基本上是在等待自己的承诺来解决我第二次调用
res.send
,这是唯一阻止线程的事情吗?这真的取决于
runAsyncMethodThatReturnsPromise()的方式
已实现。仅仅因为它返回一个承诺并不意味着它不是一个CPU绑定的函数。是的,我不认为这会阻塞线程。您可能混合了两种不同的东西:线程阻塞和异步/等待。实际上,只有一些事情可能会阻止事件循环/线程。您可以阅读更多关于这方面的内容。例如
runasynchmethodThatReturnsPromise(){return new Promise(()=>{For(let i=0;i<1e9;++i){}};}
将阻止事件循环。