我创建了一个云函数,在其中我尝试获取当前用户尚未看到的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);
});
});
});