javascript - 回调无法正常工作node.js

标签 javascript node.js callback

我正在 for 循环内执行 mysql 查询,该循环位于回调函数中,但是当我执行 console.log(i) 时,它向我显示 3 次。下面是代码。我正在使用 async.parallel,我只发布有问题的代码。 res 返回正常,但 obj 显示第三条记录三次,而是必须显示 obj1 数据、obj2 数据、obj3 数据。 console.log(i) 是示例响应。

function(user,callback){               
                for(var i = 0; i < user.length ; i++) {                 
                    var obj = user[i];
                    mySQLConn.mySQLDBConnection.query('select id,name from table where type = ?',[obj.id],function(err,res){
                        console.log(i); //This shows 3 three times      
                        obj.type = res;
                        userJSONArray.push(obj);                       
                    })
                }

            }

我想要的应该打印 1,2,3 而不是 3,3,3。非常感谢任何帮助。

最佳答案

ES6:现在可以使用 let 关键字解决这个问题。

function(user, callback) {
  for (let i = 0; i < user.length; i++) {
    let obj = user[i];
    mySQLConn.mySQLDBConnection.query('select id,name from table where type = ?', [obj.id], function(err, res) {
      console.log(i); //This shows 3 three times      
      obj.type = res;
      userJSONArray.push(obj);
    })
  }
}
<小时/>

实际上你的回调工作正常。

您的数据库查询很可能是异步的。这意味着当您从数据库中获取信息时,i 已经等于 3。

您最终可以使其同步:Synchronous database queries with Node.js

关于javascript - 回调无法正常工作node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35465671/

相关文章:

javascript - YouTube数据Api v3-未捕获的TypeError:无法读取未定义的属性 'setApiKey'

node.js - "right"路由映射 REST API 的方法

node.js - 如何从 Windows NodeJS 进程运行多个 WSL 命令?

ios - 如何使用回调在 Swift 中进行异步调用,以便主 UI 不会挂起?

javascript - 如何在javascript中向函数添加回调

javascript - 不能依赖 chrome.tabs.move 中的索引

javascript - 用momentjs计算天数出错

android - Robolectric 3.0 测试 - Android

javascript - Flexslider 不可见

javascript - 如何使用 'Twit' 库从列表中选择随机单词