Javascript 回调函数中未定义的值
我正在使用Elastic.js访问ElasticSearch并运行查询。。。。我需要运行一个方面,并获得结果,并将此结果用于另一个查询。。。我能够获得第一个回调的结果并使用该结果运行查询,但由于执行序列的问题,无法访问第二个回调中的第一个查询项。如果我使用JS的setTimeout(),我就能得到想要的结果 那么,除了设置超时,还有更好的选择吗Javascript 回调函数中未定义的值,javascript,jquery,elasticsearch,Javascript,Jquery,elasticsearch,我正在使用Elastic.js访问ElasticSearch并运行查询。。。。我需要运行一个方面,并获得结果,并将此结果用于另一个查询。。。我能够获得第一个回调的结果并使用该结果运行查询,但由于执行序列的问题,无法访问第二个回调中的第一个查询项。如果我使用JS的setTimeout(),我就能得到想要的结果 那么,除了设置超时,还有更好的选择吗 for(i in res_week){ if(res_week[i].term !=null){ var so
for(i in res_week){
if(res_week[i].term !=null){
var sourceFilter = ejs.TermsFilter("source",res_week[i].term);
var data2 = [];
var term_temp = res_week[i].term;
var count_temp = res_week[i].count;
var typesCallback = function(typeResults){
console.log(typeResults);
var temphold = typeResults.facets.srctype_list.terms;
data2.push(temphold);
console.log(term_temp);
};
data.push({"list":data2});
var temp_r = ejs.Request()
.indices(index)
.types(type)
.facet(listfacet
.facetFilter(ejs.AndFilter([timeLimit,sourceFilter])));
console.log(temp_r);
temp_r.doSearch(typesCallback);
}
在这里,我无法访问typesCallback函数中res_week[]的术语,它表示未定义,通过使用临时变量,我在函数中获得这些术语,但不是在第一次迭代中,而是仅从第二次迭代中获得 如果需要在第二个回调之前运行第一个回调,请将第二个筛选器调用放入第一个回调中 您的代码(重新排序):
我已经解决了这个问题。我没有使用setTimeout,而是创建了一个不同的函数,并在回调结束时调用该函数,将所需的结果作为传递参数。 这也将过滤器从第一次回调中带出
感谢各位的回复。:) 你能分享你的代码吗?@ArunPJohny code补充说这是我做的第一件事,我在第一次回调中放入了第二个过滤器,在那里我需要使用第一个结果在回调中循环,循环的第一次迭代触发一个错误,说“值未定义”。这就是为什么我尝试使用timeout调用这个外部函数,使用timeout它对我来说很有效,但我需要避免使用setTimeout。。。。。
for(i in res_week){
if(res_week[i].term !=null){
var sourceFilter = ejs.TermsFilter("source",res_week[i].term);
var data2 = [];
var term_temp = res_week[i].term;
var count_temp = res_week[i].count;
var typesCallback = function(typeResults){
console.log(typeResults);
var temphold = typeResults.facets.srctype_list.terms;
data2.push(temphold);
console.log(term_temp);
data.push({"list":data2});
var temp_r = ejs.Request()
.indices(index)
.types(type)
.facet(listfacet.facetFilter(ejs.AndFilter([timeLimit,sourceFilter])));
console.log(temp_r);
};
temp_r.doSearch(typesCallback);
}
}