簡體   English   中英

回調函數中的值未定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM