所以我尝试做这样的事情
async function() {
while (x) {
}
// code
}
我想这样做的原因是因为只有当 X 变为 false 时我才需要做一些事情,并且我希望它位于另一个线程中,这样我的网站仍然可用,并且根据命名和我读到的内容它,异步函数应该是异步的......这很自然,对吗? 但相反,当 while 循环运行时,我的应用程序完全卡住。有人可以解释为什么会发生这种情况以及是否有解决方法吗?
谢谢。
最佳答案
async
并不意味着多线程,它只是意味着您可以使用 await
关键字,并且该函数返回的值保证是一个 Promise,它的结果将始终以异步方式解析/拒绝。
因此,如果 async
函数中的代码不使用任何其他异步代码,那么它将像常规函数一样阻止其余代码。
如果您在 while
循环中使用 await
,则正在等待的其他代码可能会在该点交错。
async function() {
while (x) {
// ...
await someFunction() // at this `await` other code could be executed
// ...
}
// code
}
因此,async
函数中的await
做了两件事,如果await
的右侧是一个Promise,那么它就会等待直到它被解析(或拒绝),并且它将允许计划执行的其他代码交错。
关于异步函数中的Javascript while循环不是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615656/