@QcfgAlexandr

Как вернуть результат выполнения requst внутри функции NodeJS?

Суть проблемы, имеется функция:

function funcname (){
    request('https://site.ru', function (error, response, body) {
        return body;
    });
}


Как вернуть ее результат в переменную ?

К примеру:
var info = funcname();

*Код максимально упростил, но суть осталось.
  • Вопрос задан
  • 562 просмотра
Решения вопроса 1
function funcname() {
  return new Promise((resolve, reject) => {
    request('https://site.ru', (err, res, body) => {
      if (err) {
        return reject(err);
      }

      return resolve([res, body]);
    });
  });
}

(async () => {
  const [res, body] = await funcname();
})();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
rockon404
@rockon404
Frontend Developer
Почитайте о том как правильно писать асинхронный код. Можно вернуть Promise.
Пример
function getSome() {
  return new Promise((resolve, reject) => {
      request('https://site.ru', function (err, res, body) {
        if (err) {
          reject(err);
          return;
        }

        resolve(body);
    });
  });
}

Использование в коде:
getSome().then(res => {
  // do something with res
}).catch(err => {
  // handle error
});

Использование в асинхронной функции:
async foo() => {
  const some = await getSome();
  // use some
}


Для requers есть куча оберток основанных на Promise, например, request-promise.
Пример c использованием request-promise
const rp = require('request-promise');

const getSome = async () => {
  try {
    const body = await rp({ uri: 'https://site.ru', json: true });
    // do something other
    return body;
  } catch (err) {
    // handle error
    return err;
  }
}


Использование в коде:
getSome().then(res => {
  // do something with res
}).catch(err => {
  // handle error
});

Использование в асинхронной функции:
async foo() => {
  const some = await getSome();
  // use some
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы