Вы можете использовать функции async - await и, конечно, обещания.
Promise - это прокси для значения, которое не обязательно известно при создании обещания.Это позволяет связать обработчики с конечным значением успеха или причиной сбоя асинхронного действия.Это позволяет асинхронным методам возвращать значения подобно синхронным методам: вместо немедленного возврата окончательного значения асинхронный метод возвращает обещание предоставить значение в какой-то момент в будущем.
Обещание находится в одном из следующих состояний:
в ожидании: начальное состояние, не выполнено и не отклонено.выполнено: означает, что операция завершена успешно.отклонено: означает, что операция завершилась неудачно.
Так что это даст вам необходимое время для возврата данных.
Если вы не хотите обещаний, вы все равно можете заставить свой код работать с асинхронными функциями.
async function askKB(question){
var answer;
var requestOptions = {
url: host + route,
headers: {
//some code here
},
method: "POST",
json: true,
json: { "question": question }
};
await(request(requestOptions, function(err, response, body) {
if (!err && response.statusCode == 200) {
answer = body.answers[0].answer;
}
else {
answer = "Sorry! something went wrong. Try again...";
}
}));
return answer;
}