用nodejs查询数据库,虽然能查询到数据,但是返回的messageArray数组一直是空,请问如何解决这个问题

let infoSelectSql = "select id, message_id, type_id from user_message_record where uid = ? order by id desc limit ?,?";

pool.getConnection((err, connection) => {
            connection.query(
                infoSelectSql,
                [userLoginInfo.uid, sqlParams.startIndex, sqlParams.dataLength],
                (err, rows) => {
                    if(err) {
                        throw err
                    } else {

                        console.log("rows == ", rows);

                        for(let i = 0; i<rows.length; i++) {

                            (function(indexSelect){
                                if(rows[indexSelect].type_id === 0) { // 征婚
                                    userInfoDetailSql = `select id, title, content, dateline, rental, address from tenant_message where id=${rows[indexSelect].message_id}`;
                                } else if(rows[indexSelect].type_id === 1){ // 租房
                                    userInfoDetailSql = `select id, title, content, dateline, rental, address from tenant_message where id=${rows[indexSelect].message_id}`;
                                } else if(rows[indexSelect].type_id === 2) { // 拼车
                                    userInfoDetailSql = `select id, title, content, dateline, rental, address from tenant_message where id=${rows[indexSelect].message_id}`;
                                }
                                connection.query(
                                    userInfoDetailSql,
                                    [],
                                    (err, rows) => {
                                        if(err) {
                                            throw err
                                        } else {
                                            console.log(rows);
                                            if(rows.length !== 0) {
                                                messageArray.push(rows);
                                            }
                                        }
                                    }
                                );
                            })(i);

                            console.log('messageArray == ', messageArray); // 这里打印是空
                            result["code"] = "0001";
                            result["message"] = "success";
                            result["data"] = messageArray;
                            res.status(200);
                            res.send(JSON.stringify(result));
                        }

                    }
                }
            );
            pool.releaseConnection(connection);

能正确获取到数据,但是无法返回

for(let i = 0; i<rows.length; i++) {

                            if(rows[i].type_id === 0) { // 征婚
                                userInfoDetailSql = `select id, title, content, dateline, rental, address from tenant_message where id=${rows[i].message_id}`;
                            } else if(rows[i].type_id === 1){ // 租房
                                userInfoDetailSql = `select id, title, content, dateline, rental, address from tenant_message where id=${rows[i].message_id}`;
                            } else if(rows[i].type_id === 2) { // 拼车
                                userInfoDetailSql = `select id, title, content, dateline, rental, address from tenant_message where id=${rows[i].message_id}`;
                            }
                            connection.query(
                                userInfoDetailSql,
                                [],
                                (err, rows) => {
                                    if(err) {
                                        throw err
                                    } else {
                                        console.log(rows);
                                        if(rows.length !== 0) {
                                            messageArray.push(rows);
                                        }
                                    }
                                }

                            );

                            Promise.all(messageArray).then(v=>{
                                console.log("v == ", v);
                            });

                            // console.log('messageArray == ', messageArray);
                            // result["code"] = "0001";
                            // result["message"] = "success";
                            // result["data"] = messageArray;
                            // res.status(200);
                            // res.send(JSON.stringify(result));
                        }

图片描述

阅读 2.8k
1 个回答

异步吧。。。await支持就用。

最简单的就是把res.send那块都放入回调中。

  1. await方案
    因为是循环,写起来多少有点难。那就考虑promise吧。
  2. promise方案
    把所有的异步都统计到一起。然后all的时候再执行res.send

    1. arr.push(connent.query)
    2. promise.all(arr).then(v=>res.send)

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题