【问题标题】:Passing an array to another function in ReactJS将数组传递给 ReactJS 中的另一个函数
【发布时间】:2016-10-26 10:36:21
【问题描述】:

简单的反应问题让我一秒钟都回避:

  readData: function(){
    var readFromCpDev1 = firebase.database().ref('environments/' + 'cp-dev1');
    var envUsersArray = [];
    readFromCpDev1.on('value', function(snapshot) {
      envUsersArray.push(snapshot.val())
      return envUsersArray;
    });
    console.log(envUsersArray, 'hey');
  },

anotherfunc: function(){
}

我有这个功能,我想返回envUsersArray 并在任何地方使用它。显然,目前它正在返回一个空白数组,因为 readData 函数不在快照函数的范围内。 如何将其传递给 readData 函数,然后在另一个函数中使用它,例如 anotherfunc

我知道我可能需要在某个地方打电话给this.,但我并没有马上明白逻辑

【问题讨论】:

  • readFromCpDev1.on 是异步的吗?
  • @changed 我相信是的。至少根据我对 firebase 文档的理解

标签: javascript arrays function reactjs


【解决方案1】:

我建议使用 Promises。

  readData: function(){
    return new Promise(function(resolve) {
      var readFromCpDev1 = firebase.database().ref('environments/' + 'cp-dev1');
      var envUsersArray = [];
      readFromCpDev1.on('value', function(snapshot) {
        envUsersArray.push(snapshot.val())
        resolve(envUsersArray);
      });
    });
  },

  anotherfunc: function(){
    this.readData().then(function(arr) {
      //do stuff here
    });
  }

【讨论】:

    【解决方案2】:

    您可以返回一个承诺,该承诺将使用异步检索的值进行解析:

      readData: function() {
        var readFromCpDev1 = firebase.database().ref('environments/' + 'cp-dev1');
        var envUsersArray = [];
          return new Promise(function(success) {
          readFromCpDev1.on('value', function(snapshot) {
            envUsersArray.push(snapshot.val())
            success(envUsersArray);
          }
        });
      },
    
      anotherfunc: function(){
       this.readData().then(function(result) {
         console.log(result);
       });
      }
    

    【讨论】:

    • 这实际上与@Pavel Staselun 回答的相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2017-11-18
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多