Te lo concedo, este caso es un poco extraño. Aquí está la versión 2.2 de mongodb-native.
En primer lugar, find
tiene dos usos diferentes . Puede dar una función de devolución de llamada o no. Pero en en cualquier caso , regresa sincrónicamente un objeto. Más precisamente, es un cursor Podríamos esperar un mecanismo asíncrono al pasar una devolución de llamada, pero no aquí.
collection.find({ }, function (err, cursor) {
assert(!err);
});
console.log('This happens after collection.find({ }, callback)');
O
const cursor = collection.find({});
console.log('Also happening after');
Por otro lado, toArray
es una función asíncrona y también tiene dos usos diferentes. Esta vez, el objeto devuelto es diferente según los argumentos.
Son equivalentes:
cursor.toArray(function (err, documents) {
assert.equal(1, documents.length);
});
Y
cursor.toArray()
.then(documents => {
assert.equal(1, documents.length);
});
En la primera llamada, toArray
devuelve undefined
mientras que en el segundo, devuelve una Promise
.