$.Deferred .resolve() $.when() 原理示例

用$.when 必有resolve
ajax,则直接done,或$.when($.ajax()).done即可
when后 then代替done、fail更简洁
一般场景无需.promise(),如果deffered的被在外部resolve干扰 可考虑下

    var dtd = $.Deferred(); // 新建一个deferred对象
  var wait = function(dtd){
        var tasks = function(){
             alert("执行完毕!");
             dtd.resolve(); // 改变deferred对象的执行状态
             return ;//结束当前function,不再执行下方
             alert('还在进行..');
    };
    setTimeout(tasks,5000);//延迟、异步类的命令代码
       alert('1');
       return;//结束也能触发$.when.done,但是因为没有return dtd
    return dtd;//只有返回dtd,才会等待setTimeout里的.resolve()后执行when.done
  };
    $.when(wait(dtd))
  .done(function(){ alert("哈哈,成功了!"); })
  .fail(function(){ alert("出错啦!"); });

也可以将事件和$.Deferred直接简写成下方的样式

  $.when(function(){
        var dtd = $.Deferred();//新建deferred对象,放到函数内 可防止外部干扰,代码更干净
    var tasks = function(){
      alert("执行完毕!");
      dtd.resolve(); // 改变deferred对象的执行状态
            return ;//终止当前函数里的下方代码
            alert('还在进行..');
    };
    setTimeout(tasks,5000);
        alert('1');
        //此处加return; 则when得不到dtd对象,就无法等待Deferred
    return dtd;//$.when只会通过deferred对象等待当前函数里的异步和延迟命令
  }())
  .then(function(){ alert("胜败在天了"); });
    alert('我也完成了,等待when登场弹窗'); //非阻塞
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值