Обещание не работает правильно с Firebase - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующий код:

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, а затем записывает значения, когда все обещания были добавлены.

1 Ответ

0 голосов
/ 11 декабря 2018

Когда в вашем коде вызывается 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
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...