Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 回调函数中未定义的值_Javascript_Jquery_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Javascript,Jquery,elasticsearch" /> elasticsearch,Javascript,Jquery,elasticsearch" />

Javascript 回调函数中未定义的值

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

我正在使用Elastic.js访问ElasticSearch并运行查询。。。。我需要运行一个方面,并获得结果,并将此结果用于另一个查询。。。我能够获得第一个回调的结果并使用该结果运行查询,但由于执行序列的问题,无法访问第二个回调中的第一个查询项。如果我使用JS的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[]的术语,它表示未定义,通过使用临时变量,我在函数中获得这些术语,但不是在第一次迭代中,而是仅从第二次迭代中获得

如果需要在第二个回调之前运行第一个回调,请将第二个筛选器调用放入第一个回调中

您的代码(重新排序):


我已经解决了这个问题。我没有使用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);
    }
}