我有以下代码:
let promises = [];
//Return first promise from DB save to zone_obj list
firebase.database().ref('node-client/images').once('value').then(function(snapshot) {
promises.push(snapshot.val());
});
Promise.all(promises).then(values => {
console.log(values); // zone_obj
});
我要查询firebase数据库,并为每个快照将val添加到数组中。
我不完全理解诺言的概念,因此为什么它不起作用。
有人可以提供一些解释或示例,说明为什么此方法不起作用/如何解决。
我认为它会在每次获得val时添加一个promise,然后在添加所有promise后记录值。
答案 0 :(得分:2)
在您的代码中调用Promise.all()
时,promises
数组仍然为空,因为firebase.database().ref('node-client/images').once('value')
返回一个Promise,该查询在成功查询数据库后将得到解决。
在数组完全填充后尝试调用Promise.all()
:
let promises = [];
//Return first promise from DB save to zone_obj list
firebase.database().ref('node-client/images').once('value').then(function(snapshot) {
// Push the promises to the array
promises.push(snapshot.val());
})
.then(function() {
// Log the values when all promises are resolved
Promise.all(promises).then(values => {
console.log(values); // zone_obj
});
});