提问者:小点点

为什么我的无限循环是阻塞时,它是在一个异步函数? [副本]


我不明白如何使用异步函数。

为什么下面的代码会停止主线程?

async function foo() {
  for (;;) {}
}
foo();

共2个答案

匿名用户

通常,async关键字和承诺不会使同步代码变得异步,使慢速运行的代码变得快速,或使阻塞代码变得非阻塞。

async只是使函数返回一个承诺,并提供(使用await关键字)与其他承诺进行交互的机制,就像存在同步承诺一样。

你的函数开始一个循环,然后只是一圈又一圈。

它没有到达函数的末尾,这将结束函数并解决它返回的承诺。

它不会到达await关键字并在等待等待的承诺得到解决时暂停。

它就这样绕来绕去。

如果您实际上是在循环中做一些计算开销很大的事情,并且希望将其推到后台,那么您可以使用node.js工作线程或基于浏览器的Web工作线程来完成。

匿名用户

async关键字放在函数之前只是暗示这是异步函数。 您需要在要实际等待的函数之前包含关键字await。 就像这样:

async function hashPin(pin){
    const hashedPin = await bcrypt.hash(pin, saltRounds);
}

这只是我的一个项目中的例子(在发布之前,多余的代码已经被删除了)

相关问题