zoukankan      html  css  js  c++  java
  • 浅谈jQuery的promise

    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。

  • 相关阅读:
    Intellij IDEA调试功能使用总结
    193.数据库备份和恢复
    191.数据安全性控制
    192.数据完整性管理
    190.事务管理与并发控制
    189.存储过程和触发器
    云笔记项目-笔记列表弹出"分享移动删除"子菜单
    使用JavaMail发送邮件-从FTP读取图片并添加到邮件正文发送
    二进制学习
    云笔记项目-网页端debug功能学习
  • 原文地址:https://www.cnblogs.com/liliy-w/p/8080043.html
Copyright © 2011-2022 走看看