Node.jsasynchronous数组迭代

我想同步使用async.each遍历数组:

 async.each(supplier_array, function(supplier) { console.log('looking at : ' + supplier); knex(host_name + '.order_item').where({ supplier: supplier, order_id: order_id }).then(function(data) { console.log(data); knex(host_name + '.distributor').select() .then(function(data) { console.log(data); }).catch(function(error) { console.log('error: ' + error); }); }).catch(function(error) { console.log('error: ' + error); }); }); 

我的supplier_array有3个元素。 那么应该发生什么事情呢(同步):

对于供应商1 /第一个ARR /第一个数组元素:

  • 执行console.log(供应商)
  • 执行console.log(order_item)
  • 的console.log(分配器)

对于供应商2 /秒的数组元素:

  • 执行console.log(供应商)
  • 执行console.log(order_item)
  • 的console.log(分配器)

对于供应商3 /第三个数组元素:

  • 执行console.log(供应商)
  • 执行console.log(order_item)
  • 的console.log(分配器)

然而,它是asynchronous的行为:

  • 执行console.log(供应商)
  • 执行console.log(供应商)
  • 执行console.log(供应商)

  • 执行console.log(order_item)

  • 执行console.log(order_item)
  • 执行console.log(order_item)

  • 的console.log(分配器)

  • 的console.log(分配器)
  • 的console.log(分配器)

有人可以帮助我达到同步运行async内步骤的预期效果吗?

提前致谢!

你应该使用async.eachSeries如果你想按顺序迭代它们。 尝试这样的事情:

 async.eachSeries(supplier_array, function(supplier, callback) { console.log('looking at : ' + supplier); knex(host_name + '.order_item').where({ supplier: supplier, order_id: order_id }).then(function(data) { console.log(data); knex(host_name + '.distributor').select() .then(function(data) { console.log(data); callback(); // Advance to next iteration here }).catch(function(error) { console.log('error: ' + error); callback(error); // Also callback when error occurs }); }).catch(function(error) { console.log('error: ' + error); callback(error); // Also callback when error occurs }); });