我目前正在尝试研究如何使用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应该有效。
感谢您的帮助! (非常抱歉,如果这很明显,我只是无法理解……)
答案 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试图让您完成的承诺的最佳实践。