首页 > 解决方案 > 嵌套查询,nodejs 上的 promise

问题描述

我正在尝试构建一个 rest api,获取一个嵌套的 mysql 查询。

当我获取第一个查询时,这会返回一个数组,然后使用这个数组,我需要通过 array.map 为每个值的另一个查询获取数据

当脚本运行时,总是记录一个空数组,我认为一定是承诺的原因。请问有什么帮助吗?


//this the mysql queries
const getTournaments = 'SELECT ID FROM wp_posts WHERE post_type = "tournament"'
const getTournamentGame = 'SELECT meta_value FROM wp_postmeta WHERE meta_key = "tournament_game" AND post_id = ?'

async function fetchType(id){
    return new Promise ((res, rej) => {
        try{
            pool.query(getTournamentGame, [id], (err, rows) => {
                if (err) {
                    return rej(err)
                }else {
                    return res(rows[0].meta_value)
                }
            })
        } catch(err){
            console.log(err)
        }
    })
}


async function mapeado(array) {
    return new Promise (async (resolve,rej) => {
        try{
            var arr = []
            array.map((item) => {
                fetchType(item.ID).then((res) => {
                    var tourData = {
                        id: item.ID,
                        type: res
                    }
                    return tourData
                }).then((data) => {
                   arr.push(data)
                })
            })
            return resolve(arr)

        } catch(err) {
            console.log(err)
        }
    })
}

//making rest api
app.get('/tournaments', async (req, res) => {
    pool.query(getTournaments, (err, rows) => {
        mapeado(rows).then(console.log)
    })
})

标签: node.js

解决方案


推荐阅读