关于JQuery的$.Deferred对象的简单使用

Deferred是JQuery的一个延迟对象,意思是函数延迟到某个点才开始执行,改变执行状态的方法有两个(成功:resolve和失败:reject),分别对应两种执行回调(成功回调函数:done和失败回调函数:fail) 某些耗时比较长的javascript操作A方法,比如ajax读取服务器数据,不是立即返回结果的,而javascript操作B方法必须等A操作完成才能执行(或者需要用到A方法的返回结果),此时Deferred就派上用场了。

Deferred是一种将异步处理串联书写并执行的机制,Deferred对象是一种具有unresolved,resolved,rejected中某一种状态的对象。Deferred内部机制是先注册回调函数,Deferred对象状态发生变化时执行该函数,是一种提高代码可读性的机制。

Deferred对象的状态迁移只能发生一次,以then()、done()、fail()、always()、pipe()指定后续函数的方法,通过when()来并行处理,将Deferred对象中的一部分方法删除后得到是Promise对象,对状态的管理由最初创建该Deferred对象的所有者来执行。

    function A(url, param, method) {
        var asycRs = $.Deferred();
        if (null != method && '' != method) {
            if ('post' === method.toLowerCase()) {
                $.post(url, param, function (data) {
                    asycRs.resolve(data)
                });
            }
            if ('get' === method.toLowerCase()) {
                $.get(url, param, function (data) {
                    asycRs.resolve(data)
                });
            }
        } else {
            // TODO 默认get方式请求
            $.get(url, param, function (data) {
                asycRs.resolve(data)
            });
        }
        return asycRs;
    }

function B(data) {
       console.log(data); // TODO data为异步操作A方法完成,返回的结果
);

$.when(A(url, param, 'post')).done(function (data) {
       B(data); // TODO 异步操作A方法完成,返回data给B方法执行
});  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值