@qunaxis

Return выполняется раньше получения данных с помощью request, как побороть?

При оборачивании request.get в функцию return выполняется раньше, чем приходит ответ с сервера.
Пробовал помещать return и внутрь request.get, и после него, результат один - сначала приходит undefined, потом через console.log пишется ответ сервера.
Как решить проблему?

function yandex(text) {
    request.get(
        {
            url: 'https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20160818T135029Z.c4e26ce1f155163d.16a9ae1dfc2a21d21e64111ee1b0689a8c77d61b&lang=en-ru&text=' + text,
            json: true
        },
        function (error, response, body) {
            if (error) {
                console.error(error);
            } else {
                console.log(body.text[0]);
            }
        }
    );
}

console.log(yandex('test'));


Как изменить этот код для того, чтобы всё работало как надо?
  • Вопрос задан
  • 375 просмотров
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Почитайте про асинхронное программирование в Node.js. Все функции, которые содержат асинхронный ввод/вывод должны быть асинхронными, т.е. возвращать значения через callback, а return вообще им не нужен. Примерчики посмотрите: https://github.com/HowProgrammingWorks/Asynchronou... и тут https://github.com/DzyubSpirit/Asynchronous-Javascript там есть много с гетами страниц.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
werty1001
@werty1001
undefined
Используйте callback
Ответ написан
Комментировать
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Разобраться как работает асинхронный код. Поставить return в нужном месте и наслаждаться.
Пример использования дан сразу на главной странице request'a
var request = require('request');
request('http://www.google.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // здесь точно уже есть данные
  }
})
Ответ написан
Комментировать
async/await или promise
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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