nodejs сделать запрос-обещание доступным для дальнейшей обработки - PullRequest
1 голос
/ 07 мая 2020

Я хотел бы использовать модуль запроса-обещания и сделать что-нибудь с телом ответа. Однако я не могу предоставить ответ за пределами области запроса-обещания.

var rp = require('request-promise');

rp('http://www.google.com')
    .then(function (response) {
        let variable = response;
    })
    .catch(function (err) {
        // rejected
});

console.log(variable); // this will not work right? then, how to make it work in easy way?

Спасибо за помощь.

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

3 варианта для вас.

Пример 1


const rp = require("request-promise");

rp("http://www.google.com")
  .then(res => {
    // you can use response here
  })
  .catch(e => console.log(e));

Пример 2

const rp = require("request-promise");

rp("http://www.google.com")
  .then(res => restOfMyCode(res))
  .catch(e => console.log(e));

const restOfMyCode = result => {
  console.log(result);
};

Пример 3

const rp = require("request-promise");

(async () => {
  try {
    const result = await rp("http://www.google.com");
    console.log(result);
  } catch (e) {
    console.log(e);
  }
  console.log(result)
})();
0 голосов
/ 08 мая 2020

Спасибо вам обоим, вы вдохновили меня на окончательное решение, которое на данный момент выглядит так:

const rp = require('request-promise');

(async () => {

    var data = await getData();
    console.log(JSON.stringify(data, null, 2));     


    async function getData() {
            var options = {
                uri: 'https://www.google.com',
                json: true
            };
            var variable=await rp(options);
            return variable; // do anything with your variable
    }

}
) ();
0 голосов
/ 07 мая 2020

Процесс будет работать асинхронно, поэтому ваша переменная всегда будет undefined, иначе может возникнуть ошибка, если вы объявите ее внутри функции asyn c.

Лучшим подходом будет использование async await

var rp = require('request-promise');
async function getData()
{

let variable=await rp("http://www.google.com");
console.log(variable) // do anything with your variable
}


getData();

Вы хотели бы увидеть это

...