我怎么知道回调中是否需要 "err" 参数?

How would I know if "err" argument is needed in the callback?

我是 mongodb 和 javascript 的初学者。

我这里有 Mongodb Nodejs 中简单 find 方法的代码。 此代码无效。

解决方法是将最后一行改为:cursor.limit(10).toArray((err, docs) => console.log(docs));.

我不明白的是为什么我需要在这里包含 err 参数?这里是documentation for toArray method。这里没有说需要err参数。我怎么知道这里或其他方法需要 err 参数?

非常感谢!我认为这是一个非常基本的概念,我将不胜感激。

const client = new MongoClient(uri);
client.connect()
.then(() => {
  const db = client.db('sample_mflix');
  const coll = db.collection('movies');

  const cursor = coll.find();
  cursor.limit(10).toArray((docs) => console.log(docs));

})

在您链接的文档中,我们可以看到 FindCursor.toArray 有两个有效的语法排列:

  1. toArray(): Promise<TSchema[]>
  2. toArray(callback: Callback<TSchema[]>): void

既然你用的是第二个,我们需要看看documentation for Callback。它说只有一种有效语法:

  1. Callback<T>: (error?: AnyError, result?: T) => void

您必须包含 error 参数才能获得有效的 Callback,然后,您必须具有有效的 Callback 才能使用 toArray(:Callback) 排列。


表达您不关心参数值 is to use an underscore (_) 作为参数名称的典型方式。

const client = new MongoClient(uri);
client.connect()
    .then(() => {
        const db = client.db('sample_mflix');
        const coll = db.collection('movies');

        const cursor = coll.find();
        cursor.limit(10).toArray((_, docs) => { console.log(docs); });
})

如果您想使用第一个排列(returns 和 Promise),它将如下所示。这就是您已经在处理 MongoClient.connect.

的方式
const client = new MongoClient(uri);
client.connect()
    .then(() => {
        const db = client.db('sample_mflix');
        const coll = db.collection('movies');

        const cursor = coll.find();
        cursor.limit(10).toArray()
            .then(docs => { console.log(docs); });
})

实际上文档说要传递一个 callback.have 你检查回调采用什么参数?是的,这是错误和结果。

toArray(callback: Callback<TSchema[]>): void
Callback<T>: (error?: AnyError, result?: T) => void