javascript - 循环异步回调问题
天蓬老师
天蓬老师 2017-04-11 12:41:34
[JavaScript讨论组]

我有一个数组:

var a = [0,1,2,3];

我需要遍历这个数组并且提交ajax,然后判断提交是否成功来确认是否执行下一个

a.forEach(function(item){
    $.ajax({
        type: "get",
        async: false,//设置为同步
        url: "test.html",
        data:item,
        success: function() {
            //do something
            //成功才执行下一个元素提交 
        }
    });
})

我查了一下,应该不能用循环写了,只能用手动回调,例如:

var tmp = a[0];
function f1(tmp){
    $.ajax({
        type: "get",
        async: false,//设置为同步
        url: "test.html",
        data: tmp,
        success: function() {
            //do something
            //成功才执行下一个元素提交
            tmp = a.splice(0,1)
            f1(tmp)
        }
    });
}

请问是否有更好的办法,或者有什么建议提示呢?谢谢.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
伊谢尔伦

把ajax视作异步对象或者promise,用Promise库的一些工具来实现嘛

比如用Bluebird

Promise.each
Promise.mapSeries   

都是可以的

比如用Q这个库

[step1_func, step2_func, step3_func].reduce(Q.when, Q(true));
PHP中文网

其实你的第二种方法就是挺正常的处理方式了。

ringa_lee

首先你要弄清楚。
异步 == 非阻塞。
既然是非阻塞的,你肯定不能放在循环里面去做的。
一般都是用第二种方法做。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号