作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 JavaScript 回调感到困惑。我不明白他们的逻辑以及他们为什么工作。下面的代码是正确的,但是怎么可能呢?
app.get('db').collection("foo").findOne({
bar: req.query.baz
}, {
_id: 0
}, (err, doc) => {
if (err) {
res.json({
status: 503,
message: "DB fault"
});
return;
}
res.json({
status: 200,
qux: doc
});
});
这是 MongoDB 的 findOne() 的定义:
db.collection.findOne(query, projection)
但在上面的代码中,传递了两个以上的参数,所以我预计会出现错误。
最佳答案
额外的参数永远不会在 JavaScript 中抛出错误。同样在像 C 这样的语言中,它们最多只会产生编译时错误。这是完全自然的行为,您使用了错误的文档。正确的是,here
findOne(query, options, callback) -> {Promise}
由于 API 支持 Promises,您实际上可以通过链接然后使用现代 JavaScript async/await 来省略回调
const value = await findOne(query, options)
该 API 有很多差异。例如。您还可以像在 Python 中那样异步调用 Cursor 的迭代器。然而,记录在案的方式是最古老的,也可能是最快的做事方式。
关于javascript - Node.js 回调混淆 - MongoDB 的 findOne() : Why is this permitted? 的第三个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46719783/
我是一名优秀的程序员,十分优秀!