例如,require
是同步的。
如果我在异步函数中放入require并调用该异步函数,它将阻止nodejs吗?
如果我在异步函数中放入require并调用该异步函数,它将阻止nodejs吗?
是,是的。如果尚未缓存正在使用require()
加载的模块,则它将阻止解释器使用同步文件I / O从磁盘加载该模块。它在async
函数中的事实在这方面没有任何影响。
async
函数不会以任何方式更改阻塞,同步操作。它们提供自动异常处理,并允许使用await
并始终返回承诺。它们没有影响该函数内同步操作的魔力。
FYI,在几乎所有情况下,都应在模块初始化时加载代码中需要的模块。然后可以从其他代码中稍后引用它们,而不会阻止解释器加载它们。
它仍然会阻塞。对于要包装在async
函数中的任何阻塞代码,都是如此。还要意识到,除非您还使用了async
,否则使用await
函数是没有用的。
例如,您可以如下编写async
函数:
async function work() {
await null;
synchronous_task();
}
work();
console.log("called work");
这里,由于work
,对await
的调用将立即返回,但是一旦该调用之后的代码完成(直到调用堆栈为空),将继续执行[C0之后的内容],并且仍会阻塞,直到该同步代码完成执行为止。