Могу ли я сделать синхронный вызов с `request` пакетом npm? - PullRequest
0 голосов
/ 30 ноября 2018

Я использую модуль request в своем приложении NodeJS для выполнения межсерверных вызовов API.Я делаю вызов API следующим образом:

request(options, function (error, response, body) {
    if( error ){
       // return error response
    }
    // return success response here
});

По какой-то причине мне нужно не использовать этот асинхронный способ вызова, но делать это синхронно.Итак, есть ли способ сделать этот вызов синхронно.Я попытался найти другие модули для этого, но мне нужно использовать этот же модуль.

Спасибо

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Поскольку HTTP-запрос по своей природе является асинхронным, вы не можете сделать это синхронно.Тем не менее, вы можете использовать ES6 + Promises и async/await примерно так:

// First, encapsulate into a Promise
const doRequest = () => new Promise((resolve, reject) => request(options, function (error, response, body) {
  if( error ){
    reject(error)
  }
  resolve(response)
});

// And then, use async/await

const x = 1 + 1

const response = await myRequest()

console.log(response)

Дополнительная информация: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise

0 голосов
/ 01 декабря 2018

Как указано @Errorname, обещания, вероятно, то, что вы ищете.Вместо написания кода вручную, вы также можете использовать пакет request-promise: https://www.npmjs.com/package/request-promise

0 голосов
/ 30 ноября 2018

Нет, вы не можете.Запрос вернет вам обещание, и вы должны где-то обработать его, используя .then () или вызвав функцию с шаблоном async / await.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...