所以我目前正在开发一个使用api的程序。
我有两个函数atm:
getBotID()
function getBotID(domain) {
var url = "http://" + domain + ":8087/api/v1/botId";
idRequest.open("GET", url);
idRequest.onload = function() {
var botID = JSON.parse(idRequest.responseText);
};
idRequest.send();
}
和getAuth()
function getAuth(domain, user, pass) {
getBotID(domain);
var url = "http://" + domain + ":8087/api/v1/bot/login";
body = '{"username": ' + user + ', "password": ' + pass + ', "botId": ' + botID + '}';
authRequest.open("POST", url);
authRequest.setRequestHeader("Content-Type", "application/json");
authRequest.onload = function() {
var authToken = JSON.parse(authRequest.responseText);
};
authRequest.send(JSON.stringify(body));
}
我必须先获取botID才能尝试获取新的AuthToken,以便我立即在getAuth()函数中调用getBotID()。
我的问题是:我无法在getBotID()中的http请求的onload()函数之外获取botID,因为它将像这样运行:
我只是无法从onload函数中获取botID数据。我已经尝试过一个回调函数但是没有用。
答案 0 :(得分:1)
我认为这会奏效。将匿名函数传递给getBotId
并在第一次请求完成后将其调用回来:
function getBotID(domain, callback) {
var url = "http://" + domain + ":8087/api/v1/botId";
idRequest.open("GET", url);
idRequest.onload = callback;
idRequest.send();
}
function getAuth(domain, user, pass) {
getBotID(domain, function() {
var botID = JSON.parse(this.responseText);
var url = "http://" + domain + ":8087/api/v1/bot/login";
body = '{"username": ' + user + ', "password": ' + pass + ', "botId": ' + botID + '}';
authRequest.open("POST", url);
authRequest.setRequestHeader("Content-Type", "application/json");
authRequest.onload = function() {
var authToken = JSON.parse(authRequest.responseText);
};
authRequest.send(JSON.stringify(body));
});
}
答案 1 :(得分:0)
所以最简单的方法是添加一个" false" getBotIDs idRequest.open()函数的参数。这将导致代码同步,onload()函数将在其余代码运行之前完成。