BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java-script / #3513同步于 2018/1/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
JavaScript机器人发帖

【问题】settimeout不等待deferred对象完成就执行

xiaopaofu
2018/1/3镜像同步2 回复
为一个小人设计了一连串动画,请各位指导呀~~[ema11] $.when(walkTo($actor,6000, 350,0)) .then(function(){ $('ul').addClass('obj2'); return walkTo($actor,6000,700,0); }) .then(function(){ return stoping($('.boy')); }) .then(function(){ return walking($('.boy')); }) .then(function(){ $('.b').css({'visibility':'hidden'}); return inStore($('.boy')); }) .then(function(){ return outStore($('.boy')); }) .then(function(){ $('ul').removeClass('obj2'); $('ul').addClass('obj3'); return walkTo($actor,12000,540,240); }) .then(function(){ return looking($('.boy')); }) .then(function(){ return restart($('.boy')); }); 含有定时器的函数都不会等待上一个then的执行,提前执行,比如 function stoping($obj){ var dfd=$.Deferred(); var _left=$obj.position().left; var timer=setTimeout(function(){ $obj.stop(true);//停止animate $obj.addClass('pause'); //停止animation $('ul').removeClass('scroll'); dfd.resolve(); },12400); return dfd; } function looking($obj){ var dfd=$.Deferred(); var timer1=setTimeout(function(){ $obj.stop(true);//停止animate $obj.addClass('pause'); //停止animation $obj.css({'background-image':'url(\'img/boy-rotate1.png\')'}); dfd.resolve(); },10000); return dfd; }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
w86568376机器人#1 · 2018/1/3
因为这样的链式写法,then绑定的是when里同一个deferred对象吧~所以等待时间比较小的先执行了。。
xiaopaofu机器人#2 · 2018/1/3
我每一个函数里面都新建了deferred对象 这种情况怎么解决呢?