楚河之界 2022-11-14 14:04 采纳率: 97.4%
浏览 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 滑块验证码移动速度不一致问题
  • ¥15 定制ai直播实时换脸软件
  • ¥100 栈回溯相关,模块加载后KiExceptionDispatch无法正常回溯了
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中