Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 多个$http调用不';我不能按正确的顺序返回_Angularjs_Xmlhttprequest - Fatal编程技术网

Angularjs 多个$http调用不';我不能按正确的顺序返回

Angularjs 多个$http调用不';我不能按正确的顺序返回,angularjs,xmlhttprequest,Angularjs,Xmlhttprequest,我为循环做了一个,在循环内部我对我的API做了一个$http调用。 for循环按照特定的顺序进行调用,但是我如何得到响应完全是一团糟 这是我的代码: for (var i = 0; i < amountOfEntries; i++) { var _imageId = NieuwsService.nieuws[i].image; if (_imageId != "") { var uriString = "Web/Lists/getbytitle('A

我为循环做了一个
,在循环内部我对我的API做了一个
$http
调用。
for
循环按照特定的顺序进行调用,但是我如何得到响应完全是一团糟

这是我的代码:

    for (var i = 0; i < amountOfEntries; i++) {
    var _imageId = NieuwsService.nieuws[i].image;
    if (_imageId != "") {
        var uriString = "Web/Lists/getbytitle('Afbeeldingen%20voor%20nieuwsberichten')/Items(" + _imageId + ")/File";

        NieuwsService.createRequest(requestUrl, baseUrl, uriString).then(function (response) {
            var _parser = new DOMParser();
            var _xmlData = _parser.parseFromString(response.data, "text/xml");

            var _entry = _xmlData.getElementsByTagName("entry");

            var _imageUrl = "http://sharepoint" + _entry[0].getElementsByTagNameNS("*", "ServerRelativeUrl")[0].childNodes[0].nodeValue;

            //Display
            $('#imageList').append("<li><a href='#'>" + _imageUrl + "</a></li>");
            NieuwsService.images.push(_imageUrl);
        })
    }
}

var _createRequest = function (requestUrl, baseUrl, uriString) {
    var promise = $http.get(requestUrl, {
        params: {
            "baseUrl": baseUrl,
            "uriString": uriString
        }
    })
    return promise;
}

NieuwsService.createRequest = _createRequest;
return NieuwsService;
for(变量i=0;i”);
NieuwsService.images.push(_imageUrl);
})
}
}
var_createRequest=函数(requestUrl、baseUrl、uriString){
var promise=$http.get(requestUrl{
参数:{
“baseUrl”:baseUrl,
“uriString”:uriString
}
})
回报承诺;
}
NieuwsService.createRequest=\u createRequest;
返回nieuwservice;

所以问题是,我如何按照我打电话的顺序得到回复?

您可以创建和排列承诺,然后使用$q。当所有请求完成时,所有这些都将得到解决,并且您将在添加承诺的相同位置得到每个承诺的结果。

您可以创建和排列承诺,然后使用$q。当所有请求完成时,所有这些都将得到解决,并且您将在添加承诺的相同位置得到每个请求的结果。

$http在设计上是异步的,这意味着每个http将以相同的顺序发出,但响应取决于许多情况(网络、dns、服务器响应时间扩展…)

您应该以一种它会考虑到这一点的方式来设计代码


$http在设计上是异步的,这意味着每个http将以相同的顺序发出,但响应取决于许多情况(网络、dns、服务器响应时间扩展…)

您应该以一种它会考虑到这一点的方式来设计代码


正如@RonnieTroj所指出的,ajax调用是异步的,在这方面没有定义顺序

但是,如果您希望链接api调用,以便以特定顺序获得响应,那么您唯一的选择是以以下方式嵌套调用:

call1.then(function(data1) { //first call
    call2.then(function(data2) {//second call after first call completes    
     //and so on
    }) 
})

但是,这种方法的问题是它需要更多的时间,因为本质上,调用是顺序的(一个调用执行,然后另一个调用执行,而不是并行异步调用)。

正如@RonnieTroj指出的,ajax调用是异步的,在这方面没有定义顺序

但是,如果您希望链接api调用,以便以特定顺序获得响应,那么您唯一的选择是以以下方式嵌套调用:

call1.then(function(data1) { //first call
    call2.then(function(data2) {//second call after first call completes    
     //and so on
    }) 
})

但是,此方法的问题是,它将花费更多的时间,因为您本质上是按顺序进行调用(执行一个调用,然后执行另一个调用,而不是并行异步调用。)

这是因为您的$http调用是异步完成的。无论调用的顺序如何,只要调用结束,它们就会返回。@RonnieTroj我也是这么想的,但我在谷歌上搜索了如何解决这个问题,我发现我必须做出承诺并返回它,这样它只有在返回
$http
后才会返回for循环。我如何使信息同步?因为这是我能找到的唯一方法。这是一种不好的做法,http as sync服务会创建不受欢迎的ui行为。这是因为您的$http调用是异步完成的。无论调用的顺序如何,只要调用结束,它们就会返回。@RonnieTroj我也是这么想的,但我在谷歌上搜索了如何解决这个问题,我发现我必须做出承诺并返回它,这样它只有在返回
$http
后才会返回for循环。我如何使信息同步?因为这是我能找到的唯一方法。这是一种不好的做法,http as sync服务会创建不受欢迎的ui行为。我认为这不是正确的解决方案,因为我需要动态响应。如果您希望以特定顺序响应,这是唯一的方法。如果你想在没有任何特定顺序的情况下等待所有呼叫结束,那么Leandro的回答很好。是动态的,你可以添加任意数量的呼叫,然后将它们整理好,但只有在所有呼叫都到达时才能解决问题。@TarunDugar所以你是说如果我使用,它仍然不起作用?不,如果“工作”是指按特定顺序获得响应。我认为这不是正确的解决方案,因为我需要动态响应。如果您希望按特定顺序获得响应,这是唯一的方法。如果你想在没有任何特定顺序的情况下等待所有呼叫结束,那么Leandro的回答很好。是动态的,你可以添加任意数量的呼叫,然后将它们整理好,但只有在所有呼叫都到达时才能解决问题。@TarunDugar所以你是说如果我使用,它仍然不起作用?不,如果你所说的“工作”是指按照特定的顺序得到回应。