zoukankan      html  css  js  c++  java
  • JQUERY延迟对象

    API:   http://www.css88.com/jqapi-1.9/category/deferred-object/

    异步编程的处理

    JavaScript的执行流程是分为"同步"与"异步"

    传统的异步操作会在操作完成之后,使用回调函数传回结果,而回调函数中则包含了后续的工作。这也是造成异步编程困难的主要原因:

    我们一直习惯于“线性”地编写代码逻辑,但是大量异步操作所带来的回调函数,会把我们的算法分解地支离破碎。

    嵌套式回调

    动画为例,下一个动画要等上一个执行完毕才可以继续,流程就会写到回调里面

    //执行多个动画
    $('ele1').animate({
        opacity: '.5'
    }, 4000, function() {
        $('ele2').animate({
             '100px'
        }, 2000, function() {
            $('ele3').animate({
                height: '0'
            }, 2000);
        });
    });

    上面的代码编程逻辑也是正确的,但是针对这样的异步嵌套的回调逻辑,当我们的嵌套越多,代码结构层级会变得越来越深。首先是阅读上会变得困难,其次是强耦合,接口变得不好扩展。我们需要一种模式来解决这种问题,这就是Promises所要做的事情。

    为了让前端们从回调的地狱中回到天堂, jQuery 也引入了 Promise 的概念。 Promise 是一种令代码异步行为更加优雅的抽象,有了它,我们就可以像写同步代码一样去写异步代码。这个东东看起来很复杂,实际上我们只要抓住核心的使用就可以了

    观察右边代码:

    通过$.Deferred处理过的代码,很明显没有了回调的嵌套,虽然代码量看起来多了点,但是实际上,每一个代码执行部分都被封装了起来,只留了Deferred的接口处理了,等于是我们把执行的流程控制交给了Deferred,这样的好处就是我们在写嵌套函数的时候,可以用deferred提供的管道风格编写同步代码了

    dtd.then(function() {
       //操作1
    }).then(function() {
       //操作2
    }).then(function() {
      //操作3
    })

    这里要了解3个步骤

    var dtd = $.Deferred();  //创建
    dtd.resolve();          //成功
    dtd.then()              //执行回调

    在jQuery 1.8之前,then()只是.done().fail()写法的语法糖,两种写法是等价的。在jQuery 1.8之后,then()返回一个新的deferred对象,而done()返回的是原有的deferred对象。如果then()指定的回调函数有返回值,该返回值会作为参数,传入后面的回调函数。

  • 相关阅读:
    外观模式
    装饰器模式
    eclipse在运行main方法时在console里面报内存溢出的错误解决办法
    windows7安装node
    Eclipse-低版本离线集成svn步骤
    IDEA-JetBrains产品永久破解
    Java对字符串使用MD5进行加密(亲测有效)
    windows下的java项目打jar分别编写在windows与linux下运行的脚本( 本人亲测可用!)
    在linux中运行main方法所在的java类(亲测有效!!!)
    linux常用命令
  • 原文地址:https://www.cnblogs.com/cyanqq/p/4761627.html
Copyright © 2011-2022 走看看