javascript - 解决 Mongoose 虚拟属性(property)中的 promise ?

标签 javascript node.js promise async-await mongoose-schema

我正在使用异步虚拟属性来计算在特定的其他集合中引用该文档的频率。 This feature has been added.

// Schema mortician.js
const Pickup = require('./pickup')
const mongoose = require('mongoose')

const mortSchema = mongoose.Schema({
    name: {
        type: String,
        required: true
    }
}, { timestamps: true })

mortSchema.virtual('count').get( async function () {
    return await Pickup.countDocuments({ mortician: this._id })
})

module.exports = mongoose.model('Mortician', mortSchema)

但是,当我尝试像这样渲染它时,它会返回一个 Promise:Promise { <pending> }显示值为[object Promise] ,就像 joseym 在这里描述的那样:Support for Asynchronous Virtual #1894
async index(req, res) {
  try {
    const morticians = await Mortician.find({}).exec()
    res.render('pages/morticians', {
      title: 'Bestatter',
      page: req.originalUrl,
      morticians: morticians
    })
  } catch (err) { err => console.log(err) }
..
}

由于我直接传递 morticians 元素进行渲染,因此我知道在哪里放置所需的 awaitmortician.count .在将其传递给 for (const mortician of morticians) 之前,我想避免循环( res.render ) .如何解决这个问题?

在虚拟属性(property)中查询( "OtherSchema".find.. )是否有意义?什么是最佳实践?

最佳答案

您需要执行您的 promise ,然后将结果保存在一个变量中,该变量将用于呈现它

像这样的东西

async index(req, res) {
  try {
    const morticians = await Mortician.find({}).exec();
    res.render('pages/morticians', {
      title: 'Bestatter',
      page: req.originalUrl,
      morticians: morticians
    })
  } catch (err) {
    err => console.log(err)
  }
}

关于javascript - 解决 Mongoose 虚拟属性(property)中的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61771396/

相关文章:

node.js - 通过NodeJS客户端创建时间戳

javascript - promise 返回未定义

javascript - 是否可以将 firebase 的图片上传 "uploadTask.on"监听器变成一个 promise?

javascript - 将 Promise 中的值传递或访问 API

javascript - 是否可以将构造函数作为类中的方法?

javascript - D3js : Draw pack layout without the outermost circle

javascript - Javascript 中的 XHTML 验证问题

javascript - 如何从 Sails/Waterline 的数据库中删除属性

node.js - 从移动客户端进行 oAuth 的 "right"方式

javascript - 使用node.js和socket.io的协作文本工具