我正在尝试通过用户名从我的数据库中获取某些用户的个人资料详细信息。
for (var i = 0; i < this.all_data.length; i++) {
this.moduleGetUserProfileByUserName({
username: this.all_data[i].userCreated
}).then(data => {
this.user_data = data.data;
console.log(this.user_data);
});
}
但是我需要将获得的数据添加到username
所来自的同一对象中,例如this.all_data[i].UserData = this.user_data;
,但是我不能在then
内执行此操作,因为{{1} }是未定义的,因此我无法在[i]
之外执行此操作,因为它会在moduleGetUserProfileByUserName
有任何数据之前执行。
解决这个问题的正确方法是什么?
答案 0 :(得分:1)
假设其余代码都可以,并且唯一的问题是在每次异步操作之后正确引用对象索引,则可以按以下步骤进行操作:
for (let i = 0; i < this.all_data.length; i++) {
const currentIndex = i;
this.moduleGetUserProfileByUserName({
username: this.all_data[i].userCreated
}).then((data) => {
this.all_data[currentIndex].UserData = data.data;
});
}
i
将不断更新,并且在循环结束时其值将等于this.all_data.length
,但是由于const
声明是块作用域的,每个回调传递给{{ 1}}方法将保留正确的索引引用。
注意:我不知道确切的数据存储位置,但是您可以根据需要使用.then()
。
重要的编辑:正如@ 3limin4t0r在注释中指出的那样,无需创建currentIndex
常量。有趣的是,在currentIndex
循环初始化时使用let
声明的变量将已经在每个循环周期中处于块范围内。
答案 1 :(得分:0)
我建议您可以将索引和用户名一起传递给返回配置文件信息的方法。 然后,您可以与数据一起添加此索引,以便获取已为其获取数据的索引。
我向您展示了您可以使用的代码,并将您的代码行替换为以下代码行。 请更新用于获取数据的方法。
for (var i = 0; i < this.all_data.length; i++) {
this.moduleGetUserProfileByUserName({
username: this.all_data[i].userCreated,
index:i
}).then(data => {
this.user_data = data.data;
let index=data.index
this.all_data[index]=user_data
console.log(this.user_data);
});
}