我不明白如何使用异步函数。
为什么下面的代码会停止主线程?
async function foo() {
for (;;) {}
}
foo();
通常,async
关键字和承诺不会使同步代码变得异步,使慢速运行的代码变得快速,或使阻塞代码变得非阻塞。
async
只是使函数返回一个承诺,并提供(使用await
关键字)与其他承诺进行交互的机制,就像存在同步承诺一样。
你的函数开始一个循环,然后只是一圈又一圈。
它没有到达函数的末尾,这将结束函数并解决它返回的承诺。
它不会到达await
关键字并在等待等待的承诺得到解决时暂停。
它就这样绕来绕去。
如果您实际上是在循环中做一些计算开销很大的事情,并且希望将其推到后台,那么您可以使用node.js工作线程或基于浏览器的Web工作线程来完成。
将async
关键字放在函数之前只是暗示这是异步函数。 您需要在要实际等待的函数之前包含关键字await
。 就像这样:
async function hashPin(pin){
const hashedPin = await bcrypt.hash(pin, saltRounds);
}
这只是我的一个项目中的例子(在发布之前,多余的代码已经被删除了)