异步函数中的Javascript while循环不是异步的?

标签 javascript function asynchronous ecmascript-2016

所以我尝试做这样的事情

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/

相关文章:

c - 在 C 中使用用户输入的字符串从一个函数到另一个函数

python - 在 Python 解释器中调试代码

Javascript - 异步调用后同步

c# - 使用 WCF 异步有好处吗?

javascript - 如何解决这个 MongoDB/Node 异步问题?

javascript - 在文本区域中使用\字符

javascript - 重新使用 SAML token ,JSON Web 服务的客户端 - 登录网站后

javascript - 如何在transitionToRoute时启用组件的属性

javascript - AJAX + Rails 的最新技术是什么?

function - 函数算术?