Jquery的promise对象

一直用jquery,ajax一直是这么写:

 1 $.ajax({
 2                 url: 'abc.com/index',
 3                 type: 'post',
 4                 data: { abc:1 },
 5                 success: function (data) {
 6                     if (!data.success) {
 7                         alert(data.message);
 8                     } else {
 9 
10                     }
11                 }
12             });

前一段时间 看见别人这么写觉得很不错:

 1  $.ajax({
 2      url: 'abc.com/index',
 3      type: 'post',
 4      data: { abc:1 },
 5  }).done(function(data) {
 6      if (!data.success) {
 7          alert(data.message);    
 8      } else {
 9      }
10  }).fail(function() {
11      alert('请稍后重试');
12  });

突然感觉 done fail 这种写法不错....今天在写js的时候想 自定义的方法怎么实现 这种 ?

然后搜索下发现jquery封装了promise对象 只需要这么用:

 1 function test(txt) {
 2     var dtd = $.Deferred();
 3     if (!txt.trim()) {
 4         dtd.reject({ msg: '不能为空' });
 5     } else if (!reg.test(txt)) {
 6         dtd.reject({ msg: '含有非法字符' });
 7     } else if (this.tags.indexOf(txt)>=0) {
 8         dtd.reject({ msg: '已重复' });
 9     }
    dtd.resolve();
10 return dtd.promise(); 11 } 12 13 调用: 14 test('xxx') 15 .done(function(data){ 16 //xxxxxx 17 }) 18 .fail(function(data){ 19 //xxxx 20 })

 说明 test 方法返回 的是一个promise对象  

    dtd.reject 会回调所有的 fail 方法

    dtd.resolve 会回调 所有的 done方法

原文地址:https://www.cnblogs.com/rufus-hua/p/5166666.html