Javascript 然后在承诺外部声明变量,然后在承诺内部初始化,然后访问承诺外部
我需要访问outState变量,它在类外部声明,然后在promise-then-func中设置了内部getData-func 在usrs func内部,当循环完成时,我需要访问它,但我不能Javascript 然后在承诺外部声明变量,然后在承诺内部初始化,然后访问承诺外部,javascript,reactjs,react-native,google-cloud-firestore,Javascript,Reactjs,React Native,Google Cloud Firestore,我需要访问outState变量,它在类外部声明,然后在promise-then-func中设置了内部getData-func 在usrs func内部,当循环完成时,我需要访问它,但我不能 let outState = {}; class A extends Component{ getData(usr){ db.collection('a/'+usr+'/bb').get().then(snap=>{ for(i = snap.docs.length-1; i&g
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 });
}
}
}
}
我需要更新循环外部的状态,否则我可以在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});
}
}
为什么它需要在课堂之外?这似乎可能会导致以后的问题,因为有100多个用户如果在promise函数中设置state,它将在循环中更新state超过100次,这会使应用程序在执行getData函数时速度变慢听起来你解决了错误的问题。将您的状态更新合并到一个批量更新中并执行一次。不幸的是,此返回只是一个emty对象{}问题是当我们在promise then内部初始化dataForUser时,我们无法使用promise then函数外部的更新值访问它