Javascript 然后在承诺外部声明变量,然后在承诺内部初始化,然后访问承诺外部

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

我需要访问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>=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函数外部的更新值访问它