我正在尝试使用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 / first arr / first array element:
供应商2 /秒数组元素:
对于供应商3 /第三个数组元素:
然而,它以异步方式行动:
的console.log(供应商)
的console.log(order_item)
的console.log(order_item)
的console.log(分配器)
有人可以帮我实现同步执行async
内部步骤所需的效果吗?
提前致谢!
答案 0 :(得分:3)
如果要按顺序迭代它们,则应使用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
});
});