Los resultados de las consultas de base de datos no se pueden pasar dentro de los siguientes contextos:
Funciones constructoras de clase
Funciones de generador no asíncronas
Devoluciones de llamadas a
.sort()en una matrizEstablecedores de JavaScript en clases
Para acceder a los resultados de las llamadas a la base de datos, utilice funciones asíncronas, funciones generadoras asíncronas .map()o.
Constructores
Los siguientes constructores no funcionan:
// This code will fail class FindResults { constructor() { this.value = db.students.find(); } } // This code will fail function listEntries() { return db.students.find(); } class FindResults { constructor() { this.value = listEntries(); } }
Utilice una función async en su lugar:
class FindResults { constructor() { this.value = ( async() => { return db.students.find(); } )(); } }
Nota
También puede crear un método que realice una operación de base de datos dentro de una clase como alternativa a trabajar con JavaScript asincrónico.
class FindResults { constructor() { } init() { this.value = db.students.find(); } }
Para utilizar esta clase, primero construya una instancia de clase y luego llame al método .init().
Funciones generadoras
Las siguientes funciones del generador no funcionan:
// This code will fail function* FindResults() { yield db.students.findOne(); } // This code will fail function listEntries() { return db.students.findOne(); } function* findResults() { yield listEntries(); }
Utilice un async generator function en su lugar:
function listEntries() { return db.students.findOne(); } async function* findResults() { yield listEntries(); }
Ordenamiento de matriz
La siguiente ordenación de matrices no funciona:
// This code will fail db.getCollectionNames().sort( ( collectionOne, collectionTwo ) => { return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() ) } );
Utiliza .map() en su lugar.
db.getCollectionNames().map( collectionName => { return { collectionName, size: db[ collectionName ].estimatedDocumentCount() }; } ).sort( ( collectionOne, collectionTwo ) => { return collectionOne.size - collectionTwo.size; } ).map( collection => collection.collectionName);
Este enfoque para ordenar matrices suele tener mejor rendimiento que el código equivalente no compatible.
JavaScript Setters
El siguiente establecedor de JavaScript no funciona:
// This code will fail class TestClass { value = 1; get property() { return this.value; } // does not work: set property(value) { this.value = db.test.findOne({ value }); } }