Короче говоря, я создаю бота с node.js. Часть того, что я хочу сделать, - это использовать API с веб-сайта и установить части файла JSON, который возвращается переменной (хотя в моем примере я использую весь возврат, чтобы упростить мое объяснение / вопрос). Я использую request () для доступа к API, и если что-то возвращается, я устанавливаю переменную на возвращенную информацию JSON.
Я знаю, что код правильно возвращает информацию JSON, потому что я могу console.info () файл JSON с переменной. Ключевым моментом является то, что console.info () этой переменной должно выполняться в request (). Если я пытаюсь выполнить console.info () вне функции request (), он просто регистрирует «undefined».
Я поискал повсюду и могу сказать, что это как-то связано с тем, что это асинхронный вызов. Это приятно знать, но мне еще предстоит найти способ обойти эту проблему.
Ниже представлена упрощенная версия кода request () (веб-сайт отсутствует, потому что я использую ключ для доступа к API). Я просто хотел бы получить доступ к переменной вне запроса, чтобы я мог использовать ее для чего-то другого.
Обратите внимание на закомментированные комментарии console.info (). Код здесь:
var parsedData;
request("WEBSITE HERE", function(error, response, body) {
if (error){
console.info("SOMETHING WENT WRONG!");
console.info(error);
}else{
if (response.statusCode==200){
parsedData = JSON.parse(body);
//console.info(parsedData); works here and prints JSON data.
}
}});
//console.info(parsedData); here console.info() is undefined.
Для человека, утверждающего, что это дубликат ссылки, это не так. Я спрашиваю, как использовать переменную вне этой функции, и решение не было предложено в предоставленной ссылке. Кроме того, это не node.js, хотя это Javascript. В целом он похож на асинхронные вызовы, но это не тот же вопрос.
В качестве примера я использую console.info (). В конечном итоге я хочу использовать парализованные данные вне функции request (). Я знаю, почему это не определено. Он выполняется до завершения request (). Я понимаю, что это из-за асинхронного вызова. Я хочу найти обходной путь к этому.
Возможный дубликат Как мне вернуть ответ от асинхронного вызова?
Это не дубликат. Речь идет о node.js, о вызове с веб-сайта и использовании переменных вне этой функции. Ваша ссылка не предоставляет эту информацию.





запрос - один из самых популярных модулей NPM для выполнения HTTP-запросов. Он поддерживает как HTTP, так и HTTPS и по умолчанию следует перенаправлениям.
request.get ожидает URL-адрес в качестве первого аргумента и обратного вызова в качестве второго аргумента. Это означает, что функция обратного вызова вызывается после успешного завершения request.get. Вот почему (ошибка, ответ и тело) содержит действительную информацию внутри обратного вызова. Этот обратный вызов вызывается после выполнения request.get, что может занять время с момента его асинхронного вызова.
Чтобы сохранить ответ в локальной переменной, проверьте это
Разве это не противоречит принципам асинхронности. Журнал консоли вне функции запускается сразу после вызова запроса. Но обратный вызов еще не вернулся. Поэтому ожидание увидеть значение означает, что вы не понимаете разницы между javascript и последовательным языком сценариев.