Firestore HTTP Cloud Function返回具有奇怪的行为

时间:2019-07-03 18:35:36

标签: javascript google-cloud-firestore google-cloud-functions

我创建了一个云函数,在其中我尝试获取当前用户尚未看到的25个最受欢迎的帖子。我首先获取当前用户已看到的帖子ID,然后获取前25个帖子。

我过滤结果,获取这些ID的发布数据,然后将结果返回给用户设备。 在大多数情况下,它似乎可以正常工作(有点慢),但是偶尔它只显示未正确过滤的结果,或者它什么时候都不会显示。

这是我的代码细分

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

0 个答案:

没有答案