[英]Value undefined inside Callback function
我正在使用Elastic.js來訪問ElasticSearch並運行查詢...。我需要運行一個構面並獲取結果,並將該結果用於另一個查詢...我能夠獲取第一個結果並運行使用結果查詢,但由於執行順序問題而無法訪問第二個回調中的第一個查詢詞。 如果我使用JS的setTimeout(),則無法獲得所需的結果。
那么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);
}
在這里,我無法在typesCallback函數中訪問res_week []的術語,它說未定義,通過使用臨時變量,我可以在函數中獲得這些術語,但不能在第一次迭代中,而只能從第二次迭代中獲得。
如果您需要第一個回調在第二個回調之前運行,請將第二個過濾器調用放入第一個回調中。
您的代碼(重新排序):
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);
}
}
我已經解決了問題。 我沒有使用setTimeout,而是制作了一個不同的函數,並在回調結束時調用了該函數,並將所需結果作為傳遞參數。 這也使過濾器也脫離了第一個回調。
謝謝你們的回應。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.