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 }); });