gpt4 book ai didi

javascript - 在 Promise 外部声明变量,然后在 Promise 内部初始化,然后在 Promise 外部访问

转载 作者:行者123 更新时间:2023-12-03 00:04:45 24 4
gpt4 key购买 nike

我需要访问声明了 outSide 类的 outState var,然后在 Promise then() 函数中设置了 getData() 函数。

当循环完成后,我需要访问它,但我不能。

let outState = {};
class A extends Component{
getData(usr){
db.collection('a/'+usr+'/bb').get().then(snap=>{
for(i = snap.docs.length-1; i>=0; i--){
outState[usr] = [...outState[usr], snap.docs[i].data()];
}
});
}

usrs(usrs){
for(i = usrs.length-1; i>=0; i--){

this.getData(usrs[i]);
if(i===0){
this.setState({ ...this.state, ...outState });
}

}
}
}

我需要在 for 循环之外更新状态,否则我可以在 Promise func 内设置状态,但这会使我的应用程序变慢。只是我想在 Promise 之外访问它,然后运行,然后在循环之外更新它。

最佳答案

我建议将您的组件重构为大约类似这样的内容,以使一切变得更干净:

class A extends Component{
constructor() {
super();
this.state = {
usersData: {}
}
}

getData(usr){
let dataForUser = {};
db.collection('a/'+usr+'/bb').get().then(snap=>{
for(i = snap.docs.length-1; i>=0; i--){
dataForUser[usr] = [...dataForUser[usr], snap.docs[i].data()];
}
});
return dataForUser;
}

usrs(usrs){
let data = {};
for(i = usrs.length-1; i>=0; i--){
let userData = getData(usrs[i]);

if(i===0){
data = {...data, ...userData};
}
}
this.setState({usersData: data});
}
}

关于javascript - 在 Promise 外部声明变量,然后在 Promise 内部初始化,然后在 Promise 外部访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55013613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com