数据库查询的结果不能在以下上下文中传递:
类构造函数
非异步生成器函数
回调数组上的
.sort()类中的 JavaScript setter
要访问数据库调用的结果,请使用异步函数、异步生成器函数 或 .map()。
构造函数
以下构造函数不起作用:
// This code will failclass FindResults { constructor() { this.value = db.students.find(); }}
// This code will failfunction listEntries() { return db.students.find(); }class FindResults { constructor() { this.value = listEntries(); }}改用 async 函数:
class FindResults { constructor() { this.value = ( async() => { return db.students.find(); } )(); }}注意
还可以创建一个在类中执行数据库操作的方法,作为使用异步 JavaScript 的替代方法。
class FindResults { constructor() { }
init() { this.value = db.students.find(); } }要使用此类,请首先构造一个类实例,然后调用 .init() 方法。
生成器函数
以下生成器函数不起作用:
// This code will failfunction* FindResults() { yield db.students.findOne();}
// This code will failfunction listEntries() { return db.students.findOne(); }function* findResults() { yield listEntries();}改用 async generator function:
function listEntries() { return db.students.findOne(); }async function* findResults() { yield listEntries();}数组排序
以下数组排序不起作用:
// This code will faildb.getCollectionNames().sort( ( collectionOne, collectionTwo ) => { return db[ collectionOne ].estimatedDocumentCount() - db[ collectionOne ].estimatedDocumentCount() )} );改用 .map()。
db.getCollectionNames().map( collectionName => { return { collectionName, size: db[ collectionName ].estimatedDocumentCount() };} ).sort( ( collectionOne, collectionTwo ) => { return collectionOne.size - collectionTwo.size;} ).map( collection => collection.collectionName);这种数组排序方法通常比不支持的等效代码性能更高。
JavaScript Setter
以下 JavaScript setter 不起作用:
// This code will failclass TestClass { value = 1;
get property() { return this.value; }
// does not work: set property(value) { this.value = db.test.findOne({ value }); }}