首页 新闻 会员 周边 捐助

关于Promise,为何我这样写不能得到正确的执行顺序?

0
悬赏园豆:50 [已解决问题] 解决于 2016-06-27 14:35
复制代码
 1 var test = function(){
 2     var exec = function(param){
 3         var def = $.Deferred();
 4         setTimeout(function(){
 5             console.info(param);
 6             def.resolve();
 7         }, 2000);
 8         return def.promise();
 9     }
10     return exec("第一步执行").done(exec("第二步执行"));
11 };
12 
13 test().done(function(){
14     console.info("结束");
15 });
复制代码

输出:

 

本意是想输出:第一步、第二步、结束

如果使用$.when(...)把第一步和第二步同时执行的话是可以的,但问题是这两个必须有先有后

迷惑,不解

网无忌的主页 网无忌 | 菜鸟二级 | 园豆:284
提问于:2016-06-25 22:17
< >
分享
最佳答案
2
var test = function(){
    var exec = function(param){
        var def = $.Deferred();
        setTimeout(function(){
            console.info(param);
            def.resolve();
        }, 2000);
        return def.promise();
    }
    return exec("第一步执行").then(()=>exec("第二步执行"));
};
test().then(function(){
    console.info("结束");
});

 

收获园豆:50
幻天芒 | 高人七级 |园豆:37207 | 2016-06-27 11:21
其他回答(2)
0

是 setTimeout 引起的。

推荐一篇博文:setTimeout 的黑魔法

dudu | 园豆:30757 (高人七级) | 2016-06-26 10:48

应该跟 setTimeout 没有关系,如果没有第二步的话,是可以按照意愿执行的

支持(0) 反对(0) 网无忌 | 园豆:284 (菜鸟二级) | 2016-06-26 15:39
0

你把setTimeout去掉再看看,估计就知道什么原因了

Cuntain√ | 园豆:332 (菜鸟二级) | 2016-06-27 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册