我不明白如何使用异步功能。
为什么下面的代码停止主线程?
async function foo() {
for (;;) {}
}
foo();
答案 0 :(得分:7)
CIKernel
关键字不会使同步代码异步,无法快速运行慢速代码或不阻塞代码。
它只是使函数返回一个promise,并提供(与async
关键字一起)与其他promise进行交互的机制,就像同步。
您的函数开始循环,然后四处循环。
它没有到达函数的结尾,这将结束函数并解决它返回的承诺。
它没有到达await
关键字并在等待已解决的诺言时暂停。
它恰好不断旋转。
如果您实际上是在循环中做,这在计算上是昂贵的,并且您想推入后台,那么您可以使用Node.js Worker Thread或浏览器-基于Web Worker来做到这一点。
答案 1 :(得分:-3)
在函数之前放置async
关键字仅表示这是异步函数。您需要在实际上要等待的功能之前包括关键字await
。就是这样:
async function hashPin(pin){
const hashedPin = await bcrypt.hash(pin, saltRounds);
}
那只是我的一个项目的示例(多余的代码在发布前已被删除)