如何从 unirest nodejs POST 调用中获得响应?

How to get response from unirest nodejs POST call?

我使用以下代码示例调用 API,其中 returns 是访问令牌。

var responsedata = '';

unirest.post('http://sandbox.com/api/getToken')
  .headers({'Content-Type': 'application/x-www-form-urlencoded'})
  .send('apiKey=xewsdw232')
  .send('username=theuser')
  .end(function (response) {

    console.log(response.body);
    responsedata = response.body;
    
    
  });

console.log(responsedata);

Response

{ data: { token: 'JhbGciOiJIUzI1NiJ9',transID:'00582',errorCode: '00',errorMessage: '' } }

我确实收到了登录到控制台但无法将其分配给我可以在调用函数之外使用它的变量的响应。我正在努力理解回调在 javascript.

中的工作原理

JS 异步工作。您正试图在 assigned.check 这个例子之前获得价值。你在提出要求。这需要时间,但您的程序不会停止。所以你不能在函数 https://repl.it/repls/OutgoingFreshOutput

之外获取值

HTTP 请求本质上是异步的。您不会立即得到响应,这意味着 javascript 不会等待响应而是继续执行,并且每当响应被 returned 时,回调就会被调用。

如果您想要return这个响应,请将此代码封装在函数中并return一个已解决的承诺。

function getToken() {
  return new Promise((resolve, reject) => {
    unirest.post('http://sandbox.com/api/getToken')
      .headers({
        'Content-Type': 'application/x-www-form-urlencoded'
      })
      .send('apiKey=xewsdw232')
      .send('username=theuser')
      .end(function (response) {
        if (response.error) {
          return reject(response.error)
        }
        return resolve(response.body);
      });
  })
}
getToken().then((body) => console.log("success", body)).catch((error) => 
console.log("error", error))