javascript - 当导入的函数需要时间才能完成时,如何从nodeJS中的require导入字符串?

标签 javascript node.js elasticsearch

我正在调用以下代码来导入搜索查询函数

var match_all = require('./match_all');                                                                                                                                                                                                        
var data=match_all.func();                                                                                                                                                                                                                     
console.log('uo yoyo');                                                                                                                                                                                                                        
console.log(data);

Match_all如下:

var string_of_da;                                                                                                                                                                                                                               

//a function which queries for all pid and syscalls                                                                                                                                                                                            
var string = function(){                                                                                                                                                                                                                       
var client = new elasticsearch.Client({                                                                                                                                                                                                        
      .....
    })

//queries to ES                                                                                                                                                                                                                                
function getmeres(client,syscall){                                                                                                                                                                                                             
        client.search({                                                                                                                                                                                                                        
         ........                                                                                                                                                                                                                        

},function (error,response) {                                                                                                                                                                                                                  
      .......                                                                                                                                                                                                                            
showdocs(d)                                                                                                                                                                                                                                    
}                                                                                                                                                                                                                                              
});                                                                                                                                                                                                                                            
}                                                                                                                                                                                                                                                                                                                                                                                                                                      
function showdocs(d){                                                                                                                                                                                                                          
var da = d["hits"]["hits"].map(function(i){                                                                                                                                                                                                    
        return i['_source'];                                                                                                                                                                                                                   
});                                                                                                                                                                                                                                            
string_of_da = JSON.stringify(da,null,'\t');                                                                                                                                                                                                   
}                                                                                                                                                                                                                                              
return string_of_da;                                                                                                                                                                                                                           
};                                                                                                                                                                                                                                             
module.exports.func = string;
module.exports.string = string_of_da;

现在,当我执行之前的 js 程序时,它可以正确查询,但在调用 match_all.func() 并返回字符串之前,会调用 console.log。所以我的输出看起来像

悠悠悠

未定义

...elasticsearch 搜索日志...

这里出了什么问题?

最佳答案

因为您正在使用回调。回调工作异步。这就是为什么 console.log 首先打印。异步它不会等到他得到响应。回调是函数的异步等效项。完成给定任务时调用回调函数。 Node 大量使用回调。 Node 的所有 API 都是以支持回调的方式编写的。

关于javascript - 当导入的函数需要时间才能完成时,如何从nodeJS中的require导入字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44440893/

相关文章:

elasticsearch - Kibana没有使用Elasticsearch映射

javascript - 异步流程图。如何直观地表示异步逻辑

node.js - 带前缀的 npm 安装

javascript - 我想动态创建 Vue 组件的新实例,并附加每个实例的信息。我的代码有什么问题吗?

javascript - 无法获取node.js程序的输出?

node.js - 访问容器内服务的端口问题

arrays - 通过数组过滤器长度查询ElasticSearch

amazon-web-services - Kibana没有正确加载。使用Nginx反向代理设置后

javascript - 损坏的 JQuery 循环

javascript - Web Firestore - 将 Double 值保存到 Firebase