2016-11-26 51 views
1

我正在使用React應用程序,並想將一組組織數組添加到狀態樹。每個組織可通過檢索:在Firebase中對多個子項進行迭代

return firebase.database().ref('/organizations/' + org).once('value').then((snapshot) => { 
     return snapshot.val(); 
     }); 

我目前正在:

var orgs = user.organizations.map((org)=> { 
    return firebase.database().ref('/organizations/' + org).once('value').then((snapshot) => { 
    return snapshot.val(); 
    }); 
}); 

this.setState({ 
    organizations: orgs, 
}); 

這是不工作,因爲承諾不加入到狀態之前解決。有沒有人有辦法解決嗎?

回答

1

在這些情況的解決方案是將需要快照回調代碼:

var ref = firebase.database().ref('/organizations/'); 
var promises = user.organizations.map(org => ref.child(org).once('value')); 
Promise.all(promises).then(snapshots => { 
    // all snapshots have loaded 
    // TODO: call this.setState() with all snapshots. 
}) 

讓我們來看看這個讀更好:

var promises = user.organizations.map(org => { 
    return firebase.database().ref('/organizations/' + org).once('value')0; 
}); 

Promise.all(promises).then(snapshots => 
    var orgs = snapshots.map(snapshot => snapshot.val()); 
    this.setState({ 
    organizations: orgs, 
    }) 
}) 
+0

不會只加一個組織對「this.state.organizations」的價值? – Turtle

+0

啊好點。我沒有那麼在意。在這種情況下,你需要一個'Promise.all()'。 –