簡體   English   中英

Node.js 回調混亂 - MongoDB 的 findOne() 的第三個參數:為什么允許這樣做?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM