Как можно записать результат выполнения функции в отдельную переменную?

Как сохранить значение `statusCode` в отдельную переменную, чтобы можно было использовать его за пределами функции, в которой оно было получено с помощью модуля request?
  • 24 января 2024 г. 12:18
Ответы на вопрос 3
Для записи результата выполнения функции в отдельную переменную в JavaScript, вам нужно будет определить эту переменную сначала во внешней области видимости, а затем присвоить ей значение внутри функции. Однако, если вы пытаетесь получить значение асинхронно (например, используя модуль `request` в Node.js), вам нужно использовать обратные вызовы (callbacks), промисы (promises) или async/await для работы с асинхронными операциями.

Представим, что вы используете `request` для выполнения HTTP-запроса и хотите сохранить `statusCode` в переменную. Вот пример с использованием обратных вызовов:

```javascript
const request = require('request');

let myStatusCode; // переменная для сохранения statusCode

request('http://example.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    myStatusCode = response.statusCode; // сохраняем значение в переменную
    console.log('Статус код: ', myStatusCode);

    // Выполнение других действий с myStatusCode здесь
  }
});

// Здесь myStatusCode все еще будет undefined, так как 
// request выполняется асинхронно, и следующий код не будет ждать его окончания
console.log('Статус код сразу после запроса: ', myStatusCode);
```

Обратите внимание, что `myStatusCode` изначально будет `undefined`, так как код после `request` выполнится до того, как запрос закончится. Чтобы использовать `statusCode` за пределами функции обратного вызова, вам нужно организовать свой код вокруг асинхронности, скорее всего, используя промисы или async/await.

Давайте преобразуем пример выше с использованием промисов:

```javascript
const request = require('request');
const util = require('util');
const requestPromise = util.promisify(request); // Преобразование request в версию, которая возвращает промис

async function getStatusCode(url) {
  try {
    const response = await requestPromise(url);
    const statusCode = response.statusCode;
    return statusCode; // Возвращаем значение, чтобы использовать вне функции
  } catch (error) {
    console.error(error);
  }
}

async function run() {
  const statusCode = await getStatusCode('http://example.com');
  console.log('Статус код: ', statusCode);

  // Теперь можно использовать statusCode за пределами getStatusCode
}

run();
```

В этом примере, функция `getStatusCode` объявлена как `async`, что позволяет использовать `await` внутри неё для ожидания выполнения промиса. В функции `run`, мы также используем `await` для ожидания результата из `getStatusCode`, и после этого у нас есть доступ к `statusCode`, которое мы можем использовать где угодно во внешней функции `run`.
ответ здесь . Даже с примером по твоему вопросу. 
Проблема в том что ты пытаешься получить асинхронное значение в синхронном коде. Это не будет работать. Почитай про промисы и колбеки в контексте асинхронности джаваскрипт. Будет куда полезнее за строчку кода в ответе на твой вопрос.
Обернуть вызов функции в Promise и использовать await. 
И забудьте уже про var. Переходите на let/const.
Похожие вопросы