编程语言
首页 > 编程语言> > javascript – 如何制作瀑布Q承诺?

javascript – 如何制作瀑布Q承诺?

作者:互联网

我们以此为例:

>我在一个数组网址中有3个网址
> require函数返回一个只发出$http调用的promise

这是一个工作代码,但由于数组可以是’1到n’,这显然不是我想要的.
我需要3个需求作为瀑布,而不是并行.
在最后的承诺中,我需要解决最终的承诺,即var deferred.

require(urls[0]).then(function () {                            
    require(urls[1]).then(function () {                                
        require(urls[2]).then(function () {                                    
            deferred.resolve();
        });
    });
})

这种方法不起作用,因为这将并行执行所有$http调用.

var promises = [];
angular.forEach(urls, function (value) {
    promises.push(require(value));
});
$q.all(promises).then(function () {
    deferred.resolve();
});

是否有一个很好的方法来执行for / cycle?

解决方法:

创建一个函数来处理迭代:

function go (urls) {
    if (urls[0]) {
      require(urls[0]).then(function () {
          go(urls.slice(1));
      });
    }
}

go(urls);

标签:javascript,angularjs,promise,deferred,q
来源: https://codeday.me/bug/20190717/1489563.html