【发布时间】:2015-04-24 16:07:26
【问题描述】:
我有一个非常具体的问题,希望有人可以在这里帮帮我。当涉及到 NodeJS 时,我对 Javascript 更感兴趣。
我正在使用lodash 的_.forIn 功能来遍历并添加到数组内的对象中。整个事情看起来像这样:
[
{ id: 20,
keywords: 'shirts'
},
{ id: 18,
keywords: 'shoes'
}
]
基本上它是保存在 db elasticsearch 中的关键字列表。我正在尝试找到一种方法,将这些关键字将返回的结果数量的计数器添加到此对象中。
此计数来自我们用来搜索产品数据库的 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 和list_data 上获得正确的数据。
附言。 这不是我的实际代码,但它几乎是它的要点,所以可能有一些拼写错误。
另外,list 和 list_data 是我试图弄清楚它是如何工作的结果。我已经尝试阅读 JS 回调如何工作,但我所看到的似乎都无法帮助我解决我的问题。
【问题讨论】:
-
我已经看过这个问题,但那里的答案对我来说没有任何意义。我花了一整天的时间研究这些东西,其中大部分都超出了我的想象。这就是为什么我问了自己的问题,这使我更容易理解答案,因为它是针对我的问题的。现在没有人可以回答它,因为它被标记为重复。
-
了解,但如果是这种情况,那么参考您已经看过的现有问题,然后就您仍然不了解的内容提出更具体的问题会很有帮助。就像现在一样,这确实是与被骗者完全相同的问题。
-
我看不出这两个是完全相同的问题。我什至没有使用 jQuery(该页面上的答案似乎严重依赖的东西)。那么,我如何让这个问题与众不同?
-
我不知道你为什么这么说,jQuery 只用在问答中的四个例子中。无论如何,请专门查看涉及
fs.readFile的解决方案,因为它与您正在做的基本 node.js 异步查询概念相同。
标签: javascript node.js callback lodash