我有一个异步函数,由我的代码中的某个地方的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,虽然我可能会在这里混淆一些事情).