2016-10-26 44 views
0

Simpleish另一個功能作出反應的問題是迴避我第二:傳遞一個數組中ReactJS

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.地方,但裏面的邏輯是不是很來我在莫

+0

是'readFromCpDev1.on'異步? – destoryer

+0

@改變我相信如此。至少根據我對Firebase文檔 –

回答

1

我會建議使用承諾。

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 
    }); 
    } 
+0

的理解!謝了哥們。將會接受,當它讓我 –

0

您可能會返回一個承諾,將價值解決異步檢索:

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); 
    }); 
    } 
+1

它實際上是一樣的@Pavel Staselun回答。 –