Promise无法与Firebase一起正常使用

时间:2018-12-11 11:02:12

标签: node.js firebase firebase-realtime-database promise

我有以下代码:

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后记录值。

1 个答案:

答案 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
    });
});