Firebase响应取决于Firestore查询不起作用

时间:2018-04-22 10:12:15

标签: javascript firebase google-cloud-firestore firebase-admin

具体取决于Cloud Firestore中是否存在具有正确DocumentId的条目。但是,这不起作用,因为我的函数在完成查询之前发送状态200。那么我该如何才能实现这一目标呢?

这是我的代码:

access = false;

admin.firebase().collection("tuere").doc(door).collection("eintritt").get().then((snapshot) => {
    snapshot.forEach((doc) => {
        if(doc.id === uid){
            access = true;
            console.log("May open door " + uid);
        }
    });
}).catch((err) => {
    console.log(err);
});

res.status(200).send(access);

当我在Chrome中打开标签并让它加载" false"出现,但是当我等待15秒钟时,可能会打开门(uid)"出现在日志中。 我该如何解决这个问题?如何让我的功能更快地运行?

1 个答案:

答案 0 :(得分:1)

你应该在promise解析时发送HTTP响应,所以在查询保证的那个时间内:就像那样:

access = false;

admin.firebase().collection("tuere").doc(door).collection("eintritt").get()
.then((snapshot) => {
    snapshot.forEach((doc) => {
        if(doc.id === uid){
            access = true;
            console.log("May open door " + uid);
        }
    });
    res.status(200).send(access);
}).catch((err) => {
    console.log(err);
    res.status(500).send(err);
});

此外,如果出现错误,您应该发送HTTP响应,这就是我在catch中添加res.status(500).send(err);的原因

我建议你看看Doug Stevenson的这段视频:https://www.youtube.com/watch?v=7IkUgCLr5oA

还有一点令我感到惊讶:你不能使用

admin.firestore().collection("tuere").doc(door)....

而不是

admin.firebase().collection("tuere").doc(door)

我必须查看参考资料,但我觉得admin.firebase()不存在。