javascript - jquery $when 多个异步怎么变同步?
迷茫
迷茫 2017-04-11 10:40:24
[JavaScript讨论组]
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
大家讲道理

同时触发是正常的,因为你就是那样写的,看这里:

$.when(task1(),task2(),task3(),task4())

虽然用了when,但你确实是同时执行了task1()task2()task3()task4()这四个函数,所以四个异步操作真心是同时触发的,没毛病!

补充:

如果你希望顺序执行上面4个异步任务,用下面这种方式:

var tasks = [
    function() {
        var $d = $.Deferred();
        setTimeout(function() {
            console.log('t1');
            $d.resolve();
        }, 1000);
        return $d.promise();
    },
    function() {
        var $d = $.Deferred();
        setTimeout(function() {
            console.log('t2');
            $d.resolve();
        }, 1200);
        return $d.promise();
    },
    function() {
        var $d = $.Deferred();
        setTimeout(function() {
            console.log('t3');
            $d.resolve();
        }, 1200);
        return $d.promise();
    },
    function() {
        var $d = $.Deferred();
        setTimeout(function() {
            console.log('t4');
            $d.resolve();
        }, 1200);
        return $d.promise();
    }
];

tasks.reduce((previous, p) => previous.then(p), $.Deferred().resolve());
PHP中文网

又去看了下promise,恩,好像then方法我测试的时候写写少了return....真是瞎了眼...

task1().then(function(){
                return task2()
            }).then(function(){
                return task3()
            }).then(function(){
                return task4()
            }).then(function(){
                console.log('ok');
            })

不知道它这个在线是不是有问题,我在项目中这么写是没问题的...把自己坑了一把
http://jsfiddle.net/rq80vph0/

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

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