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的上下文中执行此操作时,我想检查一下是否正常
以下代码是否会阻止任何进程和/或在后台表示letrunasynchmethodthattreturnsPromise
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){}};}
将阻止事件循环。