ОК, у вас есть пара проблем.
Во-первых, концептуально о том, что вы пытаетесь сделать.Второе - это то, что вам действительно нужно изменить в своем коде, чтобы он работал.
Я не буду говорить о первой части, потому что есть много хороших ресурсов, чтобы узнать об асинхронности с примерами лучше, чем я могу сделать здесь.
Для реальных проблем с вашим кодом:
- Вам не хватает функции обратного вызова для consulQuery ()
Это должно быть что-то вроде этого (обратите внимание наcb я добавил):
module.exports = {
consulQuery: function (service, cb) {
consul.catalog.service.nodes(service, function (err, results) {
if (err) {
console.log(err);
cb(err, null)
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)];
cb(null, {
baseUrl: serviceURL,
form: {'': ''},
headers: {authorization: ''}
});
});
}
}
Во-вторых, в другом файле, в котором вы вызываете функцию, вам теперь нужно будет передать функцию обратного вызова.
options = consulQuery('auth', (err, response) => {
if(err){
console.log(err)
}
console.log(response)
});