2016-10-26 4 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

@changed Я так считаю. по крайней мере, в соответствии с моим пониманием из документов 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. –

Смежные вопросы