处理API响应时变量未更新

时间:2019-07-05 13:20:52

标签: javascript json asynchronous javascript-objects

我正在编写一个简单的函数,该函数将带有资产标签,调用我们的内部资产管理系统,并返回实际的商品ID,以便将来可以使用该ID进行API调用。

自从开始这个项目以来,我学到了很多东西,所以请原谅我可能错过的任何简单事情。我花了一点时间才意识到我需要将这段代码放在.onload()函数中,以便解析JSON响应并使之可行。

我已经将JSON请求解析为变量“ response”。我想了,这很容易,我可以只返回“ response.id”,但是...不可以。

var id = 0;

function changeID(newID) {
    id = newID;
}
function zeroPad(num) {
    return num.toString().padStart(4, "0");
}
function tag2ID(assetNum) {
    var data = null;
    var xhr = new XMLHttpRequest();
    xhr.addEventListener("readystatechange", function () {
        if (this.readyState === this.DONE) {
            console.log("1: " + this.responseText);
        }
    });
    var url = "URL WAS HERE" + zeroPad(assetNum);
    xhr.open("GET", url, true);
    xhr.setRequestHeader("authorization", "KEY WAS HERE");
    xhr.setRequestHeader("accept", "application/json");
    xhr.setRequestHeader("content-type", "application/json");

    xhr.onload = function () {
        var response = JSON.parse(xhr.response);
        if (xhr.status >= 200 && xhr.status < 400) {
            console.log("2: " + response.id);
            console.log("success");
            console.log("ID 1: " + id);
            id = response.id;
            console.log("ID 2: " + id);
        } else {
            console.log('error');
        }

    }
    xhr.send(data);

    return id;
}

因此,您可以看到在更改变量ID的值之前和之后,我正在记录ID的值。当我运行该函数时,它将返回0,但是下次我运行该函数时,即使我在另一个标记上调用它,也将返回该函数上一次运行的值。

我知道这是API请求时间的问题,但我只是无法理解为什么变量可以通过onload()中的console.log进行更新,而实际上并没有返回。

由于我全神贯注,任何帮助将不胜感激。

0 个答案:

没有答案