【问题标题】:Async function await not waiting异步功能等待不等待
【发布时间】:2019-09-06 16:28:00
【问题描述】:

我有一个异步函数,用于在 Node.js 中查询 mysql 数据库。我正在等待查询执行的结果并将结果插入到数组中。

  async function getOpenOrders() {
    try {
        const arrayLoads = [],
            last4Orders = await pool.query( `${query1} ` )
        // console.log(last4Orders)
        for ( let i = 0; i < last4Orders.length; i++ ) {
            // console.log(last4Orders[i].orderID)
            console.log( arrayLoads )
            console.log( `===================` )
            const rows = await pool.query( `${query2}` )
            console.log( rows )
            arrayLoads.push( rows )
            // console.log(arrayLoads)
        }
        // console.log(rows[0])
        // console.log(arrayLoads)
        res.send( arrayLoads )
    } catch ( err ) {
        console.log( err )
    }
}

getOpenOrders()

但是,for 循环中的 await 查询并没有停止同步代码,因为我的 console.log() 显示如下:

    []
    ===================
    []
    [ [] ]
    ===================
    []
    [ [], [] ]
    ===================
    [RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 },
      RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 }]
[ [],
  [],
[RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 },
      RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 }]
===================
[RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 },
      RowDataPacket { Number: '4732', Test: 'TQLM-384', User: 23 }]

【问题讨论】:

    标签: mysql node.js


    【解决方案1】:

    mysqlpool.query方法返回一个回调,如果你想使用async await,尝试promisify方法然后使用async await

     const {promisify} = require('util');
        async function getOpenOrders() {
            try {
                const arrayLoads = [],
                    query = promisify(pool.query).bind(pool);
                    last4Orders = await query( `${query1} ` )
                // console.log(last4Orders)
                for ( let i = 0; i < last4Orders.length; i++ ) {
                    // console.log(last4Orders[i].orderID)
                    console.log( arrayLoads )
                    console.log( `===================` )
                    const rows = await query( `${query2}` )
                    console.log( rows )
                    arrayLoads.push( rows )
                    // console.log(arrayLoads)
                }
                // console.log(rows[0])
                // console.log(arrayLoads)
                res.send( arrayLoads )
            } catch ( err ) {
                console.log( err )
            }
        }
    
        getOpenOrders()
    

    【讨论】:

    • 我的池子已经被承诺了。我的问题是 4 个查询中有 2 个的结果导致一个空数组,我认为等待代码不起作用。
    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2016-07-07
    • 2016-03-25
    • 2017-10-09
    相关资源
    最近更新 更多