Javascript/node.js中的异步循环
Asynchronous loops In Javascript/node.js
我正在使用node js和postgresql。我尝试一次插入多个查询。
数组列表:
var keywordsData = [ { name: 'demo', count: 69 }, { name: 'healthy', count: '22' }, { name: 'cooking', count: '12' }, { name: 'food', count: '9' }, { name: 'home', count: '9' }, { name: 'organic', count: '7' }, { name: 'live', count: '6' }, { name: 'openmrs', count: '6' }];
Javascript代码:
for (var indexs in keywordsData) {
var item = keywordsData[indexs].name;
var count = keywordsData[indexs].count;
var goalId = 10;
console.log("first" + indexs);
if (item.length > 1) {
client.query("insert into real_keywords(reference_id,keyword,keyword_count) values('" + goalId + "','" + item + "','" + count + "')", function(err, result) {
console.log("last" + indexs);
});
}
}
输出我像这样:
first0
first1
first2
first3
first4
first5
first6
first7
last7
last7
last7
last7
last7
last7
last7
last7
预期产出:
first0
last0
first1
last1
first2
last2
first3
last3
first4
last4
first5
last5
first6
last6
first7
last7
请任何人都可以提出解决此问题的最佳方法。
for
循环是同步的,而您正在运行的 postgres 查询是异步的 - 循环在迭代之前不会等待数据库回调。
完成这项工作的最简单方法可能是使用异步库的each
函数。例如:
var async = require('async'),
values = [{ name: 'demo', count: 69 }, { name: 'healthy', count: '22' }];
async.each(values, function (value, done) {
client.query('Some query using value.name and value.count', function (err, result) {
// query is finished
done(err, result);
});
}, function (err) {
// all queries have finished
});
相关文章:
- 无递归的异步循环
- 如何制作一个干净的异步循环
- 异步循环使用递归:如何访问推送数组数据
- 如何从Node.js中的异步循环返回
- NodeJS中的递归异步循环
- JavaScript 异步循环不返回结果
- 如何在节点 js 中打破内部异步循环
- “异步”循环访问JavaScript中的对象
- Javascript异步循环处理
- 另一个异步循环中的Javascript异步循环
- Node.js异步循环,在下一个循环之前从函数回调
- 在Node.js中处理异步循环的最佳模式
- 双异步循环,如何保证正确排序顺序的最终结果?(javascript)
- 带生成器的异步循环
- 暂停JavaScript异步循环一段时间
- 使用携带另一个数组的对象对数组进行异步循环
- jQuery的异步循环deferred (promises)
- 确定异步循环的结束
- 如何在后台创建异步循环
- Javascript/node.js中的异步循环