繁体   English   中英

For循环以错误的顺序返回promise

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM