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

时间:2018-12-24 15:13:05

标签: javascript node.js unirest

我已使用以下代码示例来调用API,该API返回访问令牌。

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);

  

响应

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

我确实获得了响应,该响应已登录到控制台,但是无法将其分配给我可以在调用函数之外使用的变量。我在努力理解回调如何在javascript中工作。

2 个答案:

答案 0 :(得分:2)

JS工作异步。您正在尝试在分配值之前获取价值。请查看此示例。您正在提出要求。需要时间,但您的程序不会停止。因此您无法在函数https://repl.it/repls/OutgoingFreshOutput

之外获得价值

答案 1 :(得分:0)

HTTP请求本质上是异步的。您不会立即获得响应,这意味着javascript不会等待响应,而是继续执行,并且只要返回响应,就会调用回调。 如果要返回此响应,请将此代码封装在函数中并返回已解析的Promise。

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(error)}
return resolve(response.body); 
});
})
}
getToken().then((body) => console.log("success", body)).catch((error) => 
console.log("error", error))
相关问题