[英]For loop is returning promises in the wrong order
我在调用函数一定次数,以从列表数组中获取单个src属性。 src属性以错误的顺序返回。 我尝试使用setTimeout,但是它返回一个null数组,而我自己的pause函数仅在一定的毫秒后才返回相同的列表顺序。
该函数在这里调用:
myLoopingFunction: function(links) {
var pause = function sleep(milliseconds) {
var currentTime = new Date().getTime();
while (currentTime + milliseconds >= new Date().getTime()) {
}
}
var deferred = $q.defer();
var promise = deferred.promise;
var src = [];
for (var i = 0;i < links.length;i++) {
getSrc(links[i]).then(function(response) {
src.push(response)
});
}
deferred.resolve(src);
return deferred.promise;
}
编辑:这是功能:
var getSrc = function(links) {
return $q.all(links.map(function(link){
return $http.get(link.Address);
})).then(function(results){
var src = results.map(function(result){
var tmp = document.implementation.createHTMLDocument();
tmp.body.innerHTML = result.data;
var video = $(tmp.body.children).find('#definitionblock iframe');
var video_src = $(video[0]).attr("src");
return video_src;
});
})
};
在这里被称为:
bslLogin.getSrc($scope.links).then(function(response) {
$scope.videos = response;
console.log($scope.videos);
})
现在返回未定义。 我可以通过console.logs看到函数链产生正确的结果,直到最后返回未定义。 它甚至无法将返回值识别为数组。
您必须使用$q.all()
以预期的顺序获取“ http-promises”的结果。 在您的代码中,http调用正在异步(并发)运行,并且回调处理程序也向数组添加了响应。
这可能是带有承诺的数组的解决方案(请注意,代码未经测试):
$q.all(links.map(function(link){
return $http.get(link.Address);
})).then(function(results){
var src = results.map(function(result){
var tmp = document.implementation.createHTMLDocument();
tmp.body.innerHTML = response.data;
var video = $(tmp.body.children).find('#definitionblock iframe');
var video_src = $(video[0]).attr("src");
console.log(video_src);
return video_src;
});
return src;
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.