リストの配列から個別のsrc属性をフェッチするために、関数をある程度呼び出しています。 src属性の順序が間違っています。私はsetTimeoutを使用しようとしましたが、nullの配列を返し、ちょうどミリ秒後に特定の量だけリストの同じ順序を返します。Forループが約束を間違った順序で返す
機能はここに呼び出されます。
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;
}
EDIT:それはここに呼ばれています
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;
});
})
};
:それは今、undefinedを返します
bslLogin.getSrc($scope.links).then(function(response) {
$scope.videos = response;
console.log($scope.videos);
})
これは、関数です。私はconsole.logsを見れば、関数の連鎖が最終的に正しい結果を生成していることがわかります。戻り値を配列として認識することさえできません。
約束を返すされていません。コールバックは結果を配列に挿入しますが、コールバックは非同期であるため、順番に実行することはほとんどありません。 –
また、遅すぎる方法を早期に解決しています。 –