浅谈jQuery的promise

时间:2023-12-24 12:08:07

jquery中的Promise,也就是我们所知道的Deferred对象。

举例1:

var data="";

function runAsync(){

  var def = $.Deferred();
  //做一些异步操作
  setTimeout(function(){
    console.log('执行完成');
    data='随便什么数据'
    def.resolve(data);
  }, 0);
  //可以在外部改变状态
  return def; //返回的deferred对象
}

console.log(data)//打印的是空字符串;

runAsync().then(function(data){
  console.log(data);//打印'随便什么数据'
});

这是我们就可以在ajax请求拿到数据的后,执行我们的方法,不用在ajax成功回调的里面写繁琐的代码。此方法不好的地方在于,外部可以改变状态(弊端),看例二。

举例2:

var data="";

function runAsync(){

  var def = $.Deferred();
  //做一些异步操作
  setTimeout(function(){
    console.log('执行完成');
    data='随便什么数据'
    def.resolve(data);
  }, 0);
  //可以在外部改变状态
  return def; //返回的deferred对象
}

console.log(data)//打印:空字符串;

var def=runAsync();

def.then(function(data){
  console.log(data);//不打印了!!!
});

def.resolve("我提前结束啦,不等数据啦")//打印:我提前结束啦,不等数据啦。(手动改变状态了)

但是我们不想在外部串改状态,return def 换成 def.promise(),会保证状态不被提前更改。更加详细的内容请点击:https://www.cnblogs.com/lvdabao。