Возвращение Firestore HTTP Cloud Function имеет странное поведение - PullRequest
1 голос
/ 03 июля 2019

Я создал облачную функцию, в которой я пытаюсь получить 25 самых популярных постов, которые текущий пользователь еще не видел.Сначала я получаю идентификаторы сообщений, которые видел текущий пользователь, а затем получаю 25 лучших сообщений.

Я фильтрую результаты, получаю данные для этих идентификаторов и возвращаю результаты на пользовательское устройство.В большинстве случаев кажется, что он работает нормально (немного медленно), но иногда он просто показывает результаты, которые не были отфильтрованы должным образом, или ничего не показывает, когда должен.

Вот мой кодовый код

exports.getExplorePage = functions.https.onRequest((req, res) => {
    var params = req.url.split("/");
    var myid = params[1];
    var ref;
    var viewed_posts = [];
    var all_posts = {};
    function _A() {
        return new Promise((resolve, reject) => {
            ref = db.collection("users").doc(myid).collection("viewedPosts").doc('content');
            ref.get().then((snapshot) => {
                let data = snapshot.data();
                if (typeof data != 'undefined') {
                    viewed_posts = data.postIds;
                }
            });
            console.log(viewed_posts);
            resolve(true);
        });
    }
    function _B() {
        return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
            ref = db.collection("posts").where('popularity', '>=', 0).orderBy('popularity', 'desc').limit(25);
            yield ref.get().then((snapshot) => {
                snapshot.forEach(csnapshot => {
                    let data = csnapshot.data();
                    let id = csnapshot.id;
                    console.log(data);
                    if (viewed_posts.indexOf(csnapshot.id) == -1) {
                        all_posts[id] = data;
                    }
                });
                console.log(all_posts);
                resolve(true);
            });
        }));
    }
    _A().then((a) => {
        _B().then((e) => {
            res.send(all_posts);
        });
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...