Для l oop не работает после чтения базы данных Firebase в JavaScript - PullRequest
0 голосов
/ 03 мая 2020

У меня есть много статей в моей базе данных Firebase в реальном времени, и я назвал их узел в серии чисел.

Я хочу получить их, используя for-loop. Перед этим я проверяю, сколько статей доступно, а затем запускаю FOR l oop соответственно. Но когда я получаю количество доступных статей, программа останавливается и программа для l oop не запускается.

Вот мой код:

let numOfArticlesAvailable;

const numOfArticlesRef = firebase.database().ref('/articles/available-count');
numOfArticlesRef.on('value', function (snapshot) {
    console.log('Articles Available: ' + snapshot.val());
    numOfArticlesAvailable = snapshot.val();
    console.log(numOfArticlesAvailable);
})

for (let index = numOfArticlesAvailable; index >= 1; index--) {
    const articlesRef = firebase.database().ref(`/articles/${index}`);
    console.log(articlesRef);
    articlesRef.on('value', function (snapshot) {
        const title = snapshot.val().title;
        const content = snapshot.val().content;
        const timestamp = snapshot.val().timestamp;

        console.log(`${title} has contents "${content}" and timestamp ${timestamp}`)
    })
}

Код регистрирует правильное значение доступных статей, но for-l oop просто не запускается.

1 Ответ

1 голос
/ 03 мая 2020

Ваш для l oop не запускается, потому что numOfArticlesRef.on('value', function (snapshot) { является асин c функцией. Это означает, что в момент запуска l oop значение numOfArticlesRef либо не определено, либо 0. или что-то в этом роде. Попробуйте сделать это:

let numOfArticlesAvailable;

const numOfArticlesRef = firebase.database().ref('/articles/available-count');
numOfArticlesRef.on('value', function (snapshot) {
    console.log('Articles Available: ' + snapshot.val());
    numOfArticlesAvailable = snapshot.val();
    console.log(numOfArticlesAvailable);
for (let index = numOfArticlesAvailable; index >= 1; index--) {
    const articlesRef = firebase.database().ref(`/articles/${index}`);
    console.log(articlesRef);
    articlesRef.on('value', function (snapshot) {
        const title = snapshot.val().title;
        const content = snapshot.val().content;
        const timestamp = snapshot.val().timestamp;

        console.log(`${title} has contents "${content}" and timestamp ${timestamp}`)
    })
}

})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...