请问使用angularjs如何在for循环里面循环多次回调?

发布于 2022-09-05 23:16:01 字数 771 浏览 27 评论 0

var app = angular.module('app', []);
    app.controller('appctrl', ['$http', '$q', function($http, $q) {
        function aaa(id) {
            var deferferred = $q.defer();
            $http({
                method: 'get',
                url: 's' + id + '.html'
            }).then(function(res) {
                deferred.resolve(1);
            })
            return deferred.promise;
        }
        var b = [0,1, 2, 3, 4, 5, 6, 7, 8, 9];
        var c = [];
        for (var i = 0; i < b.length; i++) {
            var promise = aaa(b[i]);
            promise.then(function(res) {
                c.push(res);
            })
        }
        console.log(c)
    }])

请问,如何让for循环中的promise全部完成后,取到所有的res,保存在c里?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

拥有 2022-09-12 23:16:01
for  循环是马上走下去的。所以要跳出循环等promise执行完了才玩下走。
了解下 async中的await  可以在中for循环使用await  
当js遇到await会暂时跳出循环。等await执行完了。才继续往下执行。
如果有多个await 会一个个的执行。
async function aaa() {
 ////
  for (var i = 0; i < b.length; i++) {
    await fun();//要循环执行的函数
  }
}
污味仙女 2022-09-12 23:16:01

是这样吗?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <!-- <script src="http://apps.bdimg.com/libs/angular-route/1.3.13/angular-route.js"></script> -->
</head>
<body ng-app="app" ng-controller="appctrl">
<script type="text/javascript">
    var app = angular.module('app', []);
    app.controller('appctrl', ['$http', '$q', function($http, $q) {
        function aaa(id) {
            var deferred = $q.defer();
            $http({
                method: 'get',
                url: id + '.php' //加载 php 网页
            }).then(function(res) {
                deferred.resolve(res.data);//返回获取到的值
            })
            return deferred.promise;
        }
        var b = [0,1, 2];
        var c = [];
        for (var i = 0; i < b.length; i++) {
            var promise = aaa(b[i]);
            promise.then(function(res) {
                c.push(res);
            })
        }
        console.log(c)
    }])
</script>  
</body>
</html>

其中 0.php 代码是

<?php
echo "00";
?>

其中 1.php 代码是

<?php
echo "11";
?>

其中 2.php 代码是

<?php
echo "22";
?>

返回的结果是

clipboard.png

夏了南城 2022-09-12 23:16:01

jquery中有个when方法,接受的参数就是Deferred对象。
伪代码:

$.when(...defers).done((res)=>dosomething(res));

当然你这里只需要在c每次push值之后判断c的length就行了,如果c的length等于b的length。那么就可以认为所有promise已完成

淑女气质 2022-09-12 23:16:01

推荐你用$q.all
简单用法

$q.all([promise1, promise2])
.then(res => {
    // res[0], promise1 的结果
    // res[1], promise2 的结果
})

文档:https://docs.angularjs.org/api/ng/service/$q

后知后觉 2022-09-12 23:16:01

用q.all方法可以解脱你的痛苦

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文