Google Firestore承诺

时间:2019-08-30 20:20:55

标签: javascript firebase promise google-cloud-firestore eslint

我目前正在尝试研究如何使用Firestore NodeJS进行基本查询。我收到错误“预期的catch()或return”。我希望有人能解释为什么会这样?

我正在使用快递路由器来处理路线。

方法1. ESLint错误

userRouter.get("randomroutename", (req, res) => {

    const uid = req.params.uid;
    console.log("User: " + uid);

    let collectionRef = db.collection('col');
    collectionRef.add({foo: 'bar'}).then(documentReference => {
        console.log(`Added document with name: ${documentReference.id}`);
        res.status(200).send('SUCCESS');
    });
});

环顾四周并尝试了一些方法后,这似乎奏效了,但是,我对为什么需要退货感到困惑。对于我来说,当函数“ add”确实返回可以从中访问.pron的诺言时,为什么我需要返回诺言并没有什么意义。

方法2。没有错误

userRouter.get("randomroutename", (req, res) => {

    const uid = req.params.uid;
    console.log("User: " + uid);

    let collectionRef = db.collection('col');
    return collectionRef.add({foo: 'bar'}).then(documentReference => {
        console.log(`Added document with name: ${documentReference.id}`);
        return res.status(200).send('SUCCESS');
    });
});

根据文档(https://googleapis.dev/nodejs/firestore/latest/CollectionReference.html),我认为方法1应该有效。

感谢您的帮助! (非常抱歉,如果这很明显,我只是无法理解……)

1 个答案:

答案 0 :(得分:2)

该消息说“预期的catch()或return”。请注意,这里有两个选项。如果您想将承诺的责任传递给调用者,则使用return是合适的,但这不是您想要的。相反,您应该做的是捕获then返回的诺言捕获的任何潜在错误,并进行适当处理:

collectionRef.add({foo: 'bar'}).then(documentReference => {
    console.log(`Added document with name: ${documentReference.id}`);
    res.status(200).send('SUCCESS');
}).catch(err => {
    res.status(500);
})

这样,如果由于任何原因添加文档时出错,它将对客户端产生500响应。

这些都不是Firestore独有的。这只是处理ESLint试图让您完成的承诺的最佳实践。