我有一个非常具体的问题,希望有人可以帮助我。我对 Javascript 很陌生,对 NodeJS 则更陌生。
我在用lodash
's _.forIn
遍历并添加到数组内的对象的功能。整个事情看起来是这样的:
[
{ id: 20,
keywords: 'shirts'
},
{ id: 18,
keywords: 'shoes'
}
]
基本上它是保存在弹性搜索数据库中的关键字列表。我正在尝试找到一种方法来向该对象添加这些关键字将返回的结果数量的计数器。
该计数将来自我们用来搜索产品数据库的 Elasticsearch 设置。
我想要得到的输出是这样的:
[
{ id: 20,
keywords: 'shirts',
count: 4
},
{ id: 18,
keywords: 'shoes',
count: 15
}
]
这是我现在的代码:
function get_list( data ) {
var list_data = data;
var list = _.forIn( data, function( item, n, list_data ) {
get_count( item, function( count_number ) {
list_data[n].count = count_number;
})
});
console.log( list, list_data );
}
function get_count( item, callback ) {
var query = { // elasticsearch query here };
// elasticsearch query here, that returns the count in a callback
es.count( query, function(count_number) { callback(count_number) } );
}
当我运行它时,控制台将显示未更改的数组。我已经检查了每个函数的所有返回数据,一切都检查完毕。我似乎无法获得正确的数据list
nor list_data
.
附言。
这不是我的实际代码,但它几乎是其要点,因此可能存在一些拼写错误。
Also, list
and list_data
这是我试图弄清楚它是如何工作的结果。我尝试阅读 JS 回调的工作原理,但我所看到的似乎都无法帮助我解决问题。