Docs Menu
Docs Home
/ /

Consideraciones sobre el guión

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 matriz

  • Establecedores 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.

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().

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();
}

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.

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 });
}
}

Volver

Ámbito del código

En esta página