发现一个代码问题

来源:4-1 异步编程的处理

平沙落雁式

2016-01-10 18:08

第69行直接返回dtd是不对的。必须返回dtd.promise()。原因是jQuery规定,任意一个deferred对象有三种执行状态----未完成,已完成和已失败。如果直接返回dtd,$.when()的默认执行状态为"已完成",立即触发后面的done()方法,这就失去回调函数的作用了。dtd.promise()的目的,就是保证目前的执行状态----也就是"未完成"----不变,从而确保只有操作完成后,才会触发回调函数。

写回答 关注

2回答

  • echo_kinchao
    2016-01-11 10:02:52
    已采纳

    主要是他还要促发另外一个动画的事件

    平沙落雁式

    非常感谢!

    2016-01-25 22:38:33

    共 2 条回复 >

  • 仙子鸟3621558
    2016-10-31 11:31:49

    $("#block3").animate({

                    width: "50%"

                }, 2000, function() {

                    dtd.resolve(); // 改变Deferred对象的执行状态

                });

    这个动画的回调函数已经改变了Deferred对象的执行状态,所以可以直接返回dtd对象

H5+JS+CSS3实现七夕言情

为七夕节准备的H5+JS+CSS3特效案例,由浅入深案例拆分讲解

211525 学习 · 540 问题

查看课程

相似问题