【发布时间】:2015-11-25 16:00:58
【问题描述】:
我创建了一个 for 循环,并在其中对我的 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;
所以问题是,我如何按照拨打电话的顺序获得回复?
【问题讨论】:
-
这是因为您的 $http 调用是异步完成的。无论顺序如何,他们都会在通话结束时返回。
-
@RonnieTroj 我也是这么想的,但是我用谷歌搜索了如何解决这个问题,我发现我必须做出一个承诺并返回它,所以它只会在它之后返回 for 循环得到了
$http的返回。我如何使是同步的?因为这是我能找到的唯一方法。 -
这是一种不好的做法,http 作为同步服务会造成不受欢迎的 ui 行为