[英]Add documents to ElasticSearch index through javascript loop does not work
我从PostgreSQL数据库中检索了很多行(存储在result.rows
),并将它们添加到我的ElasticSearch索引中。
仅添加一个文档可以正常工作:
var r = result.rows[0];
esClient.index({
index: 'families',
type: 'families',
id: r.family_accession,
body: {
'family_accession' : r.family_accession,
'count_seq' : r.count_seq,
'count_taxon' : r.count_taxon
}
}, function (error, response) {
console.log(error);
});
但是,当我尝试将其调用为循环时,它根本不起作用:
result.rows.forEach(function (r) {
esClient.index({
index: 'families',
type: 'families',
id: r.family_accession,
body: {
'family_accession' : r.family_accession,
'count_seq' : r.count_seq,
'count_taxon' : r.count_taxon
}
}, function (error, response) {
console.log(error);
});
});
由于您正在循环中调用异步代码,因此在执行回调时,不再存在在调用esClient.index()
函数时出现的上下文。
您需要将其封闭在一个封闭中,以保持执行上下文。
result.rows.forEach(function (r) {
(function( row ) {
esClient.index({
index: 'families',
type: 'families',
id: row.family_accession,
body: {
'family_accession' : row.family_accession,
'count_seq' : row.count_seq,
'count_taxon' : row.count_taxon
}
}, function (error, response) {
console.log(error);
});
})( r );
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.