我正在尝试使用 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/第一个到达/第一个阵列元素:
- 控制台.log(供应商)
- 控制台.log(order_item)
- 控制台.log(分销商)
对于供应商 2/第二个阵列元件:
- 控制台.log(供应商)
- 控制台.log(order_item)
- 控制台.log(分销商)
对于供应商 3/第三个阵列元件:
- 控制台.log(供应商)
- 控制台.log(order_item)
- 控制台.log(分销商)
但是,它异步运行:
- 控制台.log(供应商)
- 控制台.log(供应商)
控制台.log(供应商)
控制台.log(order_item)
- 控制台.log(order_item)
控制台.log(order_item)
控制台.log(分销商)
- 控制台.log(分销商)
- 控制台.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
});
});