Как мне установить переменную с тем, что возвращается из асинхронного запроса?

Короче говоря, я создаю бота с 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. В целом он похож на асинхронные вызовы, но это не тот же вопрос.

Разве это не противоречит принципам асинхронности. Журнал консоли вне функции запускается сразу после вызова запроса. Но обратный вызов еще не вернулся. Поэтому ожидание увидеть значение означает, что вы не понимаете разницы между javascript и последовательным языком сценариев.

Tarun Lalwani 29.03.2018 04:58

В качестве примера я использую console.info (). В конечном итоге я хочу использовать парализованные данные вне функции request (). Я знаю, почему это не определено. Он выполняется до завершения request (). Я понимаю, что это из-за асинхронного вызова. Я хочу найти обходной путь к этому.

user7977797 29.03.2018 05:00

Возможный дубликат Как мне вернуть ответ от асинхронного вызова?

Aluan Haddad 29.03.2018 05:36

Это не дубликат. Речь идет о node.js, о вызове с веб-сайта и использовании переменных вне этой функции. Ваша ссылка не предоставляет эту информацию.

user7977797 30.03.2018 04:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
39
1

Ответы 1

запрос - один из самых популярных модулей NPM для выполнения HTTP-запросов. Он поддерживает как HTTP, так и HTTPS и по умолчанию следует перенаправлениям.

request.get ожидает URL-адрес в качестве первого аргумента и обратного вызова в качестве второго аргумента. Это означает, что функция обратного вызова вызывается после успешного завершения request.get. Вот почему (ошибка, ответ и тело) содержит действительную информацию внутри обратного вызова. Этот обратный вызов вызывается после выполнения request.get, что может занять время с момента его асинхронного вызова.

Чтобы сохранить ответ в локальной переменной, проверьте это

Другие вопросы по теме