Przyznaję, ta sprawa jest trochę dziwna. Oto wersja 2.2 mongodb-native.
Przede wszystkim find
ma dwa różne zastosowania . Możesz podać funkcję zwrotną lub nie. Ale w każdym przypadku , zwraca synchronicznie obiekt. Dokładniej jest to kursor .Możemy oczekiwać mechanizmu asynchronicznego podczas przekazywania wywołania zwrotnego, ale nie tutaj.
collection.find({ }, function (err, cursor) {
assert(!err);
});
console.log('This happens after collection.find({ }, callback)');
LUB
const cursor = collection.find({});
console.log('Also happening after');
Z drugiej strony toArray
jest funkcją asynchroniczną i ma również dwa różne zastosowania. Tym razem zwracany obiekt różni się w zależności od argumentów.
Są równoważne:
cursor.toArray(function (err, documents) {
assert.equal(1, documents.length);
});
ORAZ
cursor.toArray()
.then(documents => {
assert.equal(1, documents.length);
});
W pierwszym wywołaniu toArray
zwraca undefined
podczas gdy w drugim zwraca Promise
.