我已使用以下代码示例来调用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中工作。
答案 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))