我创建了一个异步函数,如下所示:
let createUserWrapper = async function(user){
await Log.createUser(user);
if (!user.registered) {
user.registered = true;
//userToSave has been declared outside of this function's scope
userToSave = true;
}
};
第user.registered = true;
行似乎在user
对象下显示了警告。我不明白为什么会这样显示,因为在等待中发生的任何事情,我们都通过引用传递对象,因此在代码继续执行时,我们拥有registered
键的最新值。
答案 0 :(得分:0)
尝试一下:
user.registered = false;
let createUserWrapper = async function(user){
await Log.createUser(user);
if (!user.registered) { // registered value from createUser(user)
user.registered = true;
//userToSave has been declared outside of this function's scope
userToSave = true;
}
};
答案 1 :(得分:0)
这似乎是错误的肯定。 ESLint假设await Log.createUser(user);
行正在处理user
对象数据,因此,如果我们要并行使用另一个类似于上面的异步函数,例如:
let createUserWrapper2 = async function(user){
await Log.createUser2(user);
if (!user.registered) {
user.registered = true;
//userToSave has been declared outside of this function's scope
userToSave = true;
}
};
然后执行:
Promise.all([createUserWrapper(user), createUserWrapper2(user)]).then(() => {
...
});
考虑到Promise.all()中的并行执行,在两个函数的每一个中注册的user。的值可能不是最新值的值,而是旧的来自“自己的”异步函数的值。我仍然认为这有点混乱,考虑到执行是线性的,并且对象是通过引用传递的,因此无法完全指出应该显示的内容,因此每个执行滴答都将包含最新的对象数据。