我错过了猫鼬查询的exec()函数调用,然后节点应用程序获得了很高的CPU利用率。在chrome分析器中,我看到猫鼬反序列化函数调用中总使用量的35%。当 await 将这个模型投向 Promise 时,谁能解释一下?
//Many deserialize calls and high CPU usage
let messages = await Models.Message.find({});
//All fine!
messages = await Models.Message.find({}).exec();
猫鼬查询模型是可随之的。就我而言
- awaitcast Object withPromise.resolve(),
- 然后Promise.resolve调用Object 的 then()函数
- then()函数返回 Promise
我看到将对象投射到承诺是如此昂贵。
/** * 执行返回
Promise
的查询,该为 * 使用文档解决或因错误而被拒绝。 * * @param {函数} [解析] * @param {函数} [拒绝] * @return {承诺} * @api公开 */
Query.prototype.then = function(resolve, reject) {
return this.exec().then(resolve, reject);
};