等待投掷猫鼬查询如何承诺?



我错过了猫鼬查询的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();  

猫鼬查询模型是可随之的。就我而言

  1. awaitcast Object withPromise.resolve()
  2. 然后Promise.resolve调用Object 的 then()函数
  3. then()函数返回 Promise

我看到将对象投射到承诺是如此昂贵。

/** * 执行返回Promise的查询,该为 * 使用文档解决或因错误而被拒绝。 * * @param {函数} [解析] * @param {函数} [拒绝] * @return {承诺} * @api公开 */

Query.prototype.then = function(resolve, reject) {
return this.exec().then(resolve, reject);
};

最新更新