iT邦幫忙

0

Nodejs 無法等待 MySQL query 完再執行下一步

如題,

目前已採用過 callback方式 及 await方式,
但還是都會先跳過mysql 的 query,

執行順序為
我在這1 -> 我在這3 -> 我在這2 -> 我在這4 -> 我在這5

想請問如何解決此問題
讓順序變成
我在這1 -> 我在這2 -> 我在這3 -> 我在這4 -> 我在這5

程式碼

Router.get('/website', async (req, res) => {
    //mongoDB
    let exam = []
    await mongoDB.find({ _id: id }, (err, results) => {
        .....
    }).catch(err => console.log(err))

    //MysqlDB
    let sql = "select ... from ... where..."

    console.log("我在這1")
 
      mysqldb.query(sql,  (err, result) => {
            console.log("我在這2")
            if (err)
                throw err;
        }) //end query
        
    console.log("我在這3")

        await mongoDB.find({ _id: id }, (err, results) => {
            console.log("我在這4")
            if (err) {
                return res.status(400).json({ success: false, error: err })
            }
        }).catch(err => console.log(err))

    console.log("我在這5")

})

Thanks for your help.

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
dragonH
iT邦超人 5 級 ‧ 2020-04-05 17:23:41
最佳解答
      await mysqldb.query(sql,  (err, result) => {
            console.log("我在這2")
            if (err)
                throw err;
        }) //end query

不行的話

就自己包成 promise

const mysqlQuery = () => {
    return new Promise((resolve) => {
        mysqldb.query(sql,  (err, result) => {
            if (err) {
                throw err;
            }
            resolve(result);
        })
    })
}
p39212053 iT邦新手 4 級 ‧ 2020-04-05 18:47:16 檢舉

感謝D大,
我用了promise方式,
且呼叫function時加上await方式則可依照順序執行
/images/emoticon/emoticon41.gif

dragonH iT邦超人 5 級 ‧ 2020-04-05 19:10:23 檢舉

/images/emoticon/emoticon42.gif

我要發表回答

立即登入回答