[英]Node.js callback confusion - Third argument of MongoDB's findOne(): Why is this permitted?
我對 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(查詢,投影)
但是在上面的代碼中,傳遞了兩個以上的參數,所以我預計會出現錯誤。
額外的參數永遠不會在 JavaScript 中拋出錯誤。 同樣在像 C 這樣的語言中,它們最多只會產生編譯時錯誤。 這是完全自然的行為,您使用了錯誤的文檔。 正確的是, 這里
findOne(query, options, callback) -> {Promise}
由於 API 支持 Promises,您實際上可以通過鏈接 a then a use modern JavaScripts async / await 來省略回調
const value = await findOne(query, options)
該 API 有許多差異。 例如,您也可以像在 Python 中一樣異步調用 Cursor 的迭代器。 然而,記錄的方式是最古老的,也可能是最快的做事方式。
這是 MongoDB 的 findOne() 的定義:
db.collection.findOne(查詢,投影)
不,那是文檔 - 可能來自shell 命令的文檔。 如果您查看您實際使用的 Node.js 驅動程序的API 參考,您會發現記錄了回調參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.