Javascript 如何解析标记为[object promise]的退货

Javascript 如何解析标记为[object promise]的退货,javascript,node.js,Javascript,Node.js,我知道这是一个相当不切实际的问题,但我已经被困在这里大约三十分钟了 更新:临时修复,但不是我要找的。仍在等待答案 主要路线测试如下。(很好,但比我想要的要草率得多。) 我无法使下面的这一部分(来自控制器的代码片段)将对象传递到路由。这又是一个非常愚蠢的问题,但我在快速自学课程中塞进了大量的信息 async getPrefix() { let prefix = this._db.find({}) let prefixData = [] pre

我知道这是一个相当不切实际的问题,但我已经被困在这里大约三十分钟了

更新:临时修复,但不是我要找的。仍在等待答案

主要路线测试如下。(很好,但比我想要的要草率得多。)

我无法使下面的这一部分(来自控制器的代码片段)将对象传递到路由。这又是一个非常愚蠢的问题,但我在快速自学课程中塞进了大量的信息

    async getPrefix() {
        let prefix = this._db.find({})
        let prefixData = []
        prefix.select('prefix')
        prefix.exec(function(err, data) {
            data.map(function(obj) {
                prefixData.push(obj.prefix)
            })
            console.log(prefixData[0]) // logs the proper value
            return prefixData[0] // returns [Object Promise] when called through the API


        })
    }

这听起来像是对你的承诺的误解。承诺只是一种期望,即您希望在数据返回后对其进行处理。它所说的是,如果你返回数据,那么我希望你做x,如果你返回错误,我希望你做y。在这里,您没有设置代码应该如何处理数据的任何说明。尝试在函数后添加此项:

getPrefix().then(function(result) {
    // you can access the result from the promise here
}); 

在getPrefix函数的代码中,主return语句应该位于prefix.exec()函数之外,这可以通过如下方式实现:

    async getPrefix() {
        let prefix = this.find({})
        let prefixData = []
        prefix.select('prefix')
        const dataToReturn = prefix.exec(function(err, data) {
            data.map(function(obj) {
                prefixData.push(obj.prefix)
            })
            console.log(prefixData[0]) // logs the proper value
            return prefixData[0] // returns the proper value to dataToReturn variable
        })
        return dataToReturn;
    }
然后,在调用API(路由器)函数的同时,可以调用getPrefix函数,如下所示:

api.get('/', async(req, res) => {
    let prefix = await prefixSchema.getPrefix()
    res.render('index.pug', { prefix })
})

这就是
async
所做的。这与我第一次处理这个问题的方式非常相似。一旦调用路由,记录它总是返回一个未定义的值。甚至在通过函数发送它来解决它之后。@Legogatrooper您是否尝试运行这段代码,我对它进行了轻微的编辑,以删除getPrefix函数中
this
之后的
\u db
    async getPrefix() {
        let prefix = this.find({})
        let prefixData = []
        prefix.select('prefix')
        const dataToReturn = prefix.exec(function(err, data) {
            data.map(function(obj) {
                prefixData.push(obj.prefix)
            })
            console.log(prefixData[0]) // logs the proper value
            return prefixData[0] // returns the proper value to dataToReturn variable
        })
        return dataToReturn;
    }
api.get('/', async(req, res) => {
    let prefix = await prefixSchema.getPrefix()
    res.render('index.pug', { prefix })
})