Функции Firebase возвращают только ноль - PullRequest
0 голосов
/ 12 октября 2018

Цель этого состоит в том, чтобы я взял все даты из моей базы данных, упорядочил их от самых новых до самых старых, собрал необходимую информацию из моей базы данных в указанном порядке и отправил эту клиентскую сторону.Код работает на стороне сервера, и вся информация верна.Мне просто нужно отправить его моему клиенту.Моя клиентская сторона получает строки и все, что я посылаю, я думаю, проблема в том, где мое возвращаемое утверждение.Спасибо заранее всем, кто пытается мне помочь.

Это мой код на стороне сервера:

exports.loadNewestPlaylist = functions.https.onCall((request, response) => {
    try {
        var dates = [];
        var Info = [];
        var query = admin.database().ref().orderByKey();

        query.once("value")
            .then(function (snapshot) {
                snapshot.forEach(function (snapshot) {
                    if (dates.indexOf(snapshot.child("Date").val()) > -1) {}
                    else {
                        dates.push(snapshot.child("Date").val());
                        dates.sort(date_sort_asc);
                    }
                });

                dates.forEach(function (date) {
                    query.once("value")
                        .then(function (snapshot) {
                            snapshot.forEach(function (snapshot) {
                                if (date === snapshot.child("Date").val()) {
                                    Info.push(snapshot.child("Url").val(), snapshot.key);
                                }
                            });

                        });

                });

                return Info;

            });

        var date_sort_asc = function (date1, date2) {
            if (date1 > date2) return 1;
            if (date1 < date2) return -1;
            return 0;
        };
    }

    catch (error) {
        console.error(error);
    }
});

1 Ответ

0 голосов
/ 15 октября 2018

Благодаря @DougStevenson я наконец получил ответ!

try {
    var dates = [];
    var Info = [];
    var query = admin.database().ref().orderByKey();

    return new Promise((resolve, reject) => {

        query.once("value").then(function (snapshot) {

            snapshot.forEach(function (snapshot) {
                if (dates.indexOf(snapshot.child("Date").val()) > -1) { }
                else {
                    dates.push(snapshot.child("Date").val());
                    dates.sort(date_sort_asc);
                }
            });

            dates.forEach(function (date) {
                snapshot.forEach(function (snapshot) {
                    if (date === snapshot.child("Date").val()) {
                        Info.push(snapshot.child("Url").val(), snapshot.key);
                    }
                });
            });
            resolve(Info);
        });
    });

    loadNewestPlaylist().then(result => {
        return result;
    });

    var date_sort_asc = function (date1, date2) {
        if (date1 > date2) return 1;
        if (date1 < date2) return -1;
        return 0;
    };
}

catch (error) {
    console.error(error);
}

Мне нужно было использовать обещание, чтобы отправить информацию обратно на сторону клиента.

Ниже приведены некоторые полезные ссылки, которые я рекомендую прочитать людям, если они когда-либо сталкивались с этой проблемой.

Синхронизация, асинхронность и обещания Firebase

Обещание |MDN

Пример обещания

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