我可以使用`request` npm软件包进行同步通话吗?

时间:2018-11-30 10:19:07

标签: javascript node.js api request

我在NodeJS应用程序中使用request模块来进行服务器到服务器的API调用。我正在像这样进行API调用:

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

由于某种原因,我需要不使用这种异步方式进行通话,而是同步进行。因此,有没有办法以同步方式进行此调用。我试图为此找到了其他模块,但是我需要使用相同的模块。

谢谢

3 个答案:

答案 0 :(得分:3)

不,你不能。请求将返回您的诺言,您必须使用.then()或使用异步/等待模式调用该函数的地方进行处理。

答案 1 :(得分:1)

由于HTTP请求本质上是异步的,因此您无法同步执行。但是,您可以像这样使用ES6 + Promisesasync/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

答案 2 :(得分:1)

如@Errorname所示,promise可能正是您要寻找的。除了手动编写代码,您还可以使用软件包request-promisehttps://www.npmjs.com/package/request-promise