• jquery的deferred使用详解


    jquery的deferred使用详解:https://www.cnblogs.com/shijingjing07/p/6403450.html

    1.什么是deferred对象
    deferred对象是一个延迟对象,意思是函数延迟到某个点才开始执行,改变执行状态的方法有两个(成功:resolve和失败:reject),分别对应两种执行回调(成功回调函数:done和失败回调函数fail)

    2.deferred对象使用示例
    ajax方式其实是deferred对象
    1)普通的ajax操作

    复制代码
    $.ajax({
    url: "index.html",
    success: function () {
    alert("success");
    },
    error: function () {
    alert("error");
    }
    });
    复制代码

    success,error函数在请求url响应后才开始执行
    2)1.5版本后新的写法

    $.ajax("index.html")
    .done(function () { alert("success"); })
    .fail(function () { alert("error"); })
    .done(function () { alert("success2");});

    新的写法可以自由添加多个回调函数,按添加的顺序执行。
    3)为多个ajax执行回调函数

    $.when($.ajax("index.html"), $.ajax("addorder2.html"))
    .done(function () { alert("success"); })
    .fail(function () { alert("error");})

    只有两个ajax都请求成功,才会执行done函数
    4)为普通方法指定回调函数

    复制代码
    var wait=function(){
    var tasks=function(){
    alert("执行完毕!");
    };
    setTimeout(tasks,5000);
    };
    $.when(wait())
    .done(function(){alert("success");})
    .fail(function(){alert("error")});
    复制代码

    wait不是一个deferred对象,运行后没有等待wait()函数执行结果,先执行回调函数了。

    加入deferred对象,代码示例如下:

    复制代码
    var dtd=$.Deferred();
    var wait=function(dtd){
    var tasks=function(){
    alert("执行完毕!");
    dtd.resolve();
    };
    setTimeout(tasks,5000);
    return dtd;
    };
    $.when(wait(dtd))
    .done(function(){alert("success");})
    .fail(function(){alert("error")});
    复制代码

    其中$.when()中的参数必须是个deferred对象,
    dtd.resolve();改变执行状态为成功,调用done回调函数。
    dtd.reject();改变执行状态为失败,调用fail回调函数。
    5)deferred对象的promise()方法
    上例中,定义了一个全局的deferred对象,在deferred对象wait外部也可以调用改变执行状态函数。
    deferred对象调用promise()方法后,就只能执行回调函数(done,fail)了,不能执行状态改变函数(resolve,reject)
    代码示例如下:

    复制代码
    var wait=function(){
    var dtd=$.Deferred();
    var tasks=function(){
    alert("执行完毕!");
    dtd.resolve();
    };
    setTimeout(tasks,5000);
    return dtd.promise();
    };
    var d=wait();
    d.resolve();//执行执行状态改变函数resolve不起任何作用!
    $.when(d)
    .done(function(){alert("success");})
    .fail(function(){alert("error")});
    复制代码
     
     
  • 相关阅读:
    【洛谷P4557】【JSOI2018】—战争(Minkowski Sum)
    【洛谷P4557】【JSOI2018】—战争(Minkowski Sum)
    【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
    【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
    多测师讲解pyhon__hashlib_高级讲师肖sir
    多测师讲解python函数 _open_高级讲师肖sir
    多测师讲解python函数 _zip_高级讲师肖sir
    多测师讲解内置函数 _format_高级讲师肖sir
    多测师讲解python _函数return_高级讲师肖sir
    多测师讲解python _函数中变量_高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/bydzhangxiaowei/p/11601033.html
Copyright © 2020-2023  润新知