小编cro*_*ogs的帖子

在非异步函数中使用"await"

我有一个异步函数,由我的代码中的某个地方的setInterval运行.此函数定期更新某些缓存.

我还有一个不同的同步函数需要检索值 - 最好是从缓存中检索,如果它是缓存未命中,那么从数据源(我意识到以同步方式进行IO操作是不明智的,但我们假设在这种情况下这是必需的).

我的问题是我希望同步函数能够等待来自异步函数的值,但是不可能await在非async函数内使用关键字:

function syncFunc(key) {
    if (!(key in cache)) {
        await updateCacheForKey([key]);
    }
}

async function updateCacheForKey(keys) {
    // updates cache for given keys
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,通过将内部逻辑提取updateCacheForKey到新的同步函数中,并从现有函数中调用此新函数,可以轻松地避免这种情况.

我的问题是为什么首先绝对防止这个用例?我唯一的猜测是它与"白痴"有关,因为在大多数情况下,从同步函数等待异步函数是错误的.但是我认为它有时会有其有效的用例我错了吗?

(我认为这在C#中也可以使用Task.Wait,虽然我可能会在这里混淆一​​些事情).

javascript asynchronous async-await

18
推荐指数
4
解决办法
2万
查看次数

标签 统计

async-await ×1

asynchronous ×1

javascript ×1