Node.js回调工作不正常



我正在 for 循环中执行 mysql 查询,这个循环在回调函数中,但是当我执行 console.log(i) 时,它向我显示 3 三次。 下面是代码。我正在使用async.parallel,我只发布有问题的代码。res 也返回正常,但 obj 显示第三条记录三次,而是必须显示 obj1 数据、obj2 数据、obj3 数据。控制台.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。

您最终可以使其同步:使用 Node 同步数据库查询.js

这是因为异步调用。当您的通话结束时,i有 3 个......你可以做这样的事情:

for(var i = 0; i < user.length ; i++) {                 
    var obj = user[i];
    (function(i, obj)
    {
        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, obj);
}

最新更新