楚河之界 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日

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛