【发布时间】:2016-07-10 04:23:24
【问题描述】:
我正在尝试使用 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(发行商)
但是,它是异步操作的:
- 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里面的步骤的预期效果吗?
提前致谢!
【问题讨论】:
-
您可能必须对每个 knex 承诺进行“退货”。这承认 async 让它知道有一个要处理的承诺。试试看,如果它是正确的答案,请告诉我。我自己遇到了这个问题。此外,您可以将第 9 行的内部“then”移出一个级别,因为您正在返回一个承诺。
标签: javascript arrays node.js asynchronous