循环内部的Javascript异步调用

Javascript async call inside for loop

本文关键字:异步 调用 Javascript 内部 循环      更新时间:2023-09-26

我正在JavaScript中从for循环内部进行异步API调用,我一直在思考如何理解结果。这段代码对API进行了正确的调用(我从fiddler中了解这一点)。

然而,当结果返回并且我在console.log(翻译)上打印结果时,我只看到最后一个API调用的结果。

我知道这是一个异步问题,但我应该如何最好地处理来自xmlhttp2的传入响应?

        for (var j = 0; j <= current; j++) {
        //some preprocessing                
            var xmlhttp2=new XMLHttpRequest();
            xmlhttp2.onreadystatechange=function()
            {
                if (xmlhttp2.readyState==4 && xmlhttp2.status==200)
                {
                    var translation = xmlhttp2.responseText;
                    console.log(translation);
                }
            }                               
            var sendparam = "http://api.foo.do.stuff.etc";
            xmlhttp2.open("GET",sendparam,true);
            xmlhttp2.send();
        }
    }

想明白了。关闭FTW

    for (var j = 0; j <= current; j++) {
    //some preprocessing                
        (function (j) {
        var xmlhttp2=new XMLHttpRequest();
        xmlhttp2.onreadystatechange=function()
        {
            if (xmlhttp2.readyState==4 && xmlhttp2.status==200)
            {
                var translation = xmlhttp2.responseText;
                console.log(translation);
            }
        }                               
        var sendparam = "http://api.foo.do.stuff.etc";
        xmlhttp2.open("GET",sendparam,true);
        xmlhttp2.send();
        })(j);
    }