For循环内的JavaScript顺序/同步回调函数

时间:2017-03-28 00:51:45

标签: javascript callback promise

我目前有这种情况......

function loop (num1, callback) {
    for (i = 0; i < num1; i++) {
        console.log("loop count: " + i);
        callback();
    }
}

目前正在输出以下样本结果:

loop count: 1
loop count: 2
loop count: 3
...
loop count: num1 - 1
callback output 1
callback output 2
callback output 3
...
callback output num1 - 1

我希望它做的是等到每个回调都完成执行并输出结果然后再转到循环中的下一个项目。即根据下面的样本输出:

loop count: 1
callback output 1
loop count: 2
callback output 2
loop count: 3
callback output 3
...
loop count: num1 - 1
callback output num1 - 1

有谁知道如何在我的函数中实现这种顺序/同步操作模式?

提前感谢您的帮助!

... UPDATE

好的,所以调用回调函数就是这样......

loop(10, updateDB);

传递给循环的回调函数如下......

function updateDB(sql_string, responseObject) {
  var mysql = require('mysql');
  var connection = mysql.createConnection({
      host : 'localhost',
      user : 'user',
      password : 'password',
      database : 'database',
  });
  connection.connect();
  var query = sql_string;
  connection.query(query, function(err, results) {
      connection.end();
      if (err) {
        console.log(err);
        responseObject.push({"queryStatus":"FAIL"});
      }
      if (err == null) {
        console.log('Changed ' + results.changedRows + ' rows');
        responseObject.push({"queryStatus":"PASS"});
      }
  });
};

2 个答案:

答案 0 :(得分:3)

你的回调显然是异步的,但这并不会使你想要在循环中继续执行之前强行执行它。这是使用Promises调用下一个循环周期的方法。

inner join

答案 1 :(得分:0)

你可以使用javascript

的承诺来使用它
 function callback(item) {
   return new Promise(function(resolve, reject) {
    console.log('callback item ', item);
    resolve(item);
   });
 }

 function loopCall(num) {
   for (var i = 1; i < num; i++) {
         console.log('loop item ', i);
         callback(i).then(function(data) {

         }, function(err) {
            console.log(err);
            console.log('Something Broke');
         })
   }
 }

loopCall(120);

这是你获得所需输出的方法。如果你想使用node.js环境并且有一个npm模块async

我希望它会有所帮助。