【发布时间】:2019-11-11 17:44:40
【问题描述】:
我的程序中有这种惰性初始化代码:
let user = null;
let getUser = async () => {
if(!user) {
user = await getUserSomehow();
}
return user;
};
我知道这是不安全的,因为如果我有下一个代码可能会出现竞争情况:
// one place of the program
let u1 = await getUser();
...
// another place of the program running during getUserSomehow() for u1 still hasn't finished
let u2 = await getUser();
getUserSomehow() 将被调用两次而不是一次。
如何避免这种情况?
【问题讨论】:
-
只需删除
await。 -
@Bergi 你的评论太短了,乍一看它看起来很愚蠢(就像你建议摆脱异步代码一样)。但是,如果不打算在任何地方直接使用“用户”变量,那么您是完全正确的。
标签: javascript asynchronous async-await eslint