【发布时间】:2019-07-03 06:37:53
【问题描述】:
我在 utils 文件中有一个函数,我想调用它并将导出的结果分配给一个变量。
当前,变量已定义,然后我尝试分配返回结果,但是当我 console.log 时,我得到未定义的结果。
这是我的 utils/consul 文件
var consul = require("consul")({host: config.consul.host'});
var consulBase = [];
var options;
module.exports = {
consulQuery: function(service){
consul.catalog.service.nodes(service, function(err, results) {
if(err) {console.log(err); throw err;}
if(results.length <= 0) return {message: `Error could not find any service of ${service} registered with consul,`, errorCode: 500};
if(results.length > 0) consulBase = [];
results.forEach((result) => {
consulBase.push(result.ServiceAddress+ ':' +result.ServicePort);
});
var serviceURL = 'http://' + consulBase[Math.floor(Math.random()*consulBase.length)];
return options = {
baseUrl : serviceURL,
form: {'':''},
headers: {authorization: ''}
};
});
}
然后在另一个文件中,我这样调用,然后尝试将值分配给 'options' 但未定义。
var consulQuery = require("../utils/consul").consulQuery;
// Get options array right away
var options = consulQuery('auth');
// Get options array every 5 seconds
setInterval(() => {
options = consulQuery('auth');
console.log(options);
}, 5 * 1000);
【问题讨论】:
-
@CertainPerformance 它是如何重复的?我的问题和它不同。我看了看,看不出它是如何解决我的问题的。
-
问题几乎一模一样。您正在尝试从异步调用返回响应。
-
^问题的本质是相同的,要解决它,您需要了解这两个问题是如何归结为相同的:从异步调用返回一个变量。
-
consul.catalog.service.nodes(service, function(err, results) {:这个函数有一个回调作为第二个参数=它是异步的。如果不是,则没有任何理由将回调作为参数。
标签: node.js function include export utility-method