コールバックでnull値を取得する でも、コンソールで値を取得していますconsole.log(list)
。forEachネストされたFirebaseでコールバックを取得するには
しかし、私は完全にすべてのforEach
操作afetr finallist
たいとlist
var list = [];
var mkeys = ['-Ka2D86jpdjKpTf2-Nmf', '-KaCPtlIoPX34ltMPqs3'];
function Getumanes(msgkeys,callback) {
msgkeys.forEach(function (key) {
var msgstref = firebase.database().ref("Msgtemplate/" + key + '/Actionusers');
msgstref.orderByChild('status').equalTo(true).limitToFirst(2).once('value').then(function (snap) {
snap.forEach(function (csnap) {
list.push(csnap.key);
})
console.log(list);
})
})
callback(list)
}
Getumanes(mkeys, function (finallist) {
console.log("finallist: " + finallist);
});
Firebaseはデータを非同期で収集する傾向があります。そのため、リストにはそれが入力される前にコンソールに送信されている可能性があります。 'list'を使う前に、非同期コールバックが完了するまで待つ必要があります。 –
Thanx @Alex、あなたはどのようにそれを達成することができますか?いくつかのコードの一部で –
基本的に値はコールバック内で計算され、コールバックはconsole.log(list)の後に実行され、その平均リストは空です。コールバック内のconsole.logにデータが表示されます。それが非同期要求の仕組みです。それらは呼び出され、残りのコードが実行され、要求が完了するとコールバックが実行されます。 – GillesC