楚河之界 2022-11-14 14:04 采纳率: 100%
浏览 20
已结题

node如何得到正确的返回值

node如何得到正确的返回值

下面的代码,返回到客户端的json数组总是空,执行后也是在控制台先输出2,后输出1,明明findData(id)在前,为什么先输出了2,而不是先输出findData里的1

var findTalk = function(id){
 connection.query('SELECT id,content,date,userimg,username FROM talk'+id, function(err, rows, fields) {
  if (err)
    throw err;
  if (rows) {
    for (var i = 0; i < rows.length; i++) {
      var talk = {
        id: 0,
        content: "",
        date: '',
        userimg: '',
        username: ''
      };
      talk.id = rows[i].id;
      talk.content = rows[i].content;
      talk.date = rows[i].date.toString().substr(0, 21);
      talk.userimg = rows[i].userimg;
      talk.username = rows[i].username;
      talks.push(talk);
 
    }
console.log('1');
  }
 
});
 
};
 
app.get('/talk/', function(req, res) {
 
  var id = req.query.id;
  findTalk(id);
for (var i = 0; i < talks.length; i++) {
  json[i] = talks[i];
}
  console.log('2');
  res.send(json);
});

  • 写回答

3条回答 默认 最新

  • CSDN专家-showbo 2022-11-14 14:06
    关注

    query是异步执行的,这个和ajax异步查询一个意思,要用回调的形式来获取查询返回,要不talks永远得不到正确的查询返回值

     
        var findTalk = function (id,callback) {///////////////
            connection.query('SELECT id,content,date,userimg,username FROM talk' + id, function (err, rows, fields) {
                if (err)
                    throw err;
                if (rows) {
                    for (var i = 0; i < rows.length; i++) {
                        var talk = {
                            id: 0,
                            content: "",
                            date: '',
                            userimg: '',
                            username: ''
                        };
                        talk.id = rows[i].id;
                        talk.content = rows[i].content;
                        talk.date = rows[i].date.toString().substr(0, 21);
                        talk.userimg = rows[i].userimg;
                        talk.username = rows[i].username;
                        talks.push(talk);
     
                    }
                    console.log('1');
     
                    callback()///////////
                }
     
            });
     
        };
     
        app.get('/talk/', function (req, res) {
     
            var id = req.query.id;
            findTalk(id, function () {//////////////
                for (var i = 0; i < talks.length; i++) {
                    json[i] = talks[i];
                }
                console.log('2');
                res.send(json);
            });
        });
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 创建了问题 11月14日

悬赏问题

  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题