• 异步和同步

    • 异步,操作之间没有关系,同时执行多个操作, 代码复杂

    • 同步,同时只能做一件事,代码简单

  • Promise 对象

    • 用同步的方式来书写异步代码

    • Promise 让异步操作写起来,像在写同步操作的流程,不必一层层地嵌套回调函数

    • 改善了可读性,对于多层嵌套的回调函数很方便

    • 充当异步操作与回调函数之间的中介,使得异步操作具备同步操作的接口

  • Promise 也是一个构造函数

    • 接受一个回调函数f1作为参数,f1里面是异步操作的代码

    • 返回的p1就是一个 Promise 实例

    • 所有异步任务都返回一个 Promise 实例

    • Promise 实例有一个then方法,用来指定下一步的回调函数

      let p1 = new Promise(function(resolve, reject){
      // 异步代码 resolve 成功了 reject 失败了
      // $.ajax() 执行异步 AJAX 请求
      $.ajax({
      url: '10-arr.txt', //规定发送请求的 URL。默认是当前页面。
      dataType:'json',//预期的服务器响应的数据类型。
      success(arr){
      resolve(arr);
      },
      error(err){
      reject(err);
      }
      })
      }); p1.then(function(arr){
      console.log('成功了'+arr);
      },function(err){
      console.log('失败了'+err);
      });
      let p1 = new Promise(function(resolve, reject){
      $.ajax({
      url: '10-arr.txt',
      dataType:'json',
      success(arr){
      resolve(arr);
      },
      error(err){
      reject(err);
      }
      })
      });
      let p2 = new Promise(function(resolve, reject){
      $.ajax({
      url: '10-arr1.txt',
      dataType:'json',
      success(arr){
      resolve(arr);
      },
      error(err){
      reject(err);
      }
      })
      });
      Promise.all([
      p1,p2
      ]).then(function(arr){
      let [res1, res2] = arr;
      alert('全成功了');
      alert(res1);
      alert(res2);
      },function(){
      alert('至少有一个失败了');
      });
      // 失败!!!!!!!!!!!!!
      function createPromise(url){
      return new Promise(function(resolve, reject){
      $.ajax({
      url,
      dataType:'json',
      success(arr){
      resolve(arr);
      },
      error(err){
      reject(err);
      }
      })
      });
      }
      Promise.all([
      createPromise('10-arr.txt'),
      createPromise('10-arr1.txt')
      ]).then(function(arr){
      let [res1, res2] = arr;
      alert('全成功了');
      alert(res1);
      alert(res2);
      },function(){
      alert('至少有一个失败了');
      });
      // 失败!!!!!!!!!!!!!
       Promise.all([
      $.ajax({url:'10-arr.txt',dataType:'json'}),
      $.ajax({url:'10-arr1.txt',dataType:'json'})
      ]).then(function(results){
      let [arr,json] = results;
      alert('成功了');
      console.log(arr.json);
      },function(){
      alert('失败了');
      });

        

ES6——Promise的更多相关文章

  1. 通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise

    Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同.不过它们的作用可以简单的用两句话来描述 Deffered 触发 resolve ...

  2. ES6 Promise 接口

    构造函数 new Promise(function(resolve, reject){}); 构造函数接受一个函数(executor)作为参数,该函数在返回 Promise 实例之前被调用.函数的两个 ...

  3. Es6 Promise 用法详解

     Promise是什么??    打印出来看看  console.dir(Promise) 这么一看就明白了,Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方 ...

  4. ES6 Promise 全面总结

    转载:点击查看原文 ES6 Promise对象 ES6中,新增了Promise对象,它主要用于处理异步回调代码,让代码不至于陷入回调嵌套的死路中. @-v-@ 1. Promise本质 Promise ...

  5. ES6 Promise 异步操作

    最近越来越喜欢与大家进行资源分享了,并且及时的同步到自己的园子内,为什么呢? 一.小插曲(气氛搞起) 在上个月末,由于领导的高度重视(haha,这个高度是有多高呢,185就好了),走进了公司骨干员工的 ...

  6. 微信小程序Http高级封装 es6 promise

    公司突然要开放微信小程序,持续蒙蔽的我还不知道小程序是个什么玩意. 于是上网查了一下,就开始着手开发..... 首先开发客户端的东西,都有个共同点,那就是  数据请求! 看了下小程序的请求方式大概和a ...

  7. 解析ES6 Promise

    ES6 Promise 概念之类的,大概读者都应该有所知道,接下来我们直入终点. 先让我们来看看什么是Promise吧,他是一个object,类,arry,function? 首先,学习它的时候应该讲 ...

  8. jquery Promise和ES6 Promise的区别

    1. Deferred对象有resolve和reject方法,可以直接修改状态 jquery用Deferred实现了Promise规范,Deferred与ES6 Promise的最大区别是: Defe ...

  9. ES6 Promise对象then方法链式调用

    then()方法的作用是Promise实例添加解决(fulfillment)和拒绝(rejection)状态的回调函数.then()方法会返回一个新的Promise实例,所以then()方法后面可以继 ...

  10. ES6 Promise(2)

    Promise的兴起,是因为异步方法调用中,往往会出现回调函数一环扣一环的情况.这种情况导致了回调金字塔的出现.不仅代码写起来费劲不美观,而且问题复杂的时候,阅读代码的人也难以理解. db.save( ...

随机推荐

  1. linux运维、架构之路-Git+Jenkins实现自动化部署

    一.Jenkins介绍          jenkins是一个用JAVA编写的开源的持续集成工具,运行在servlet容器中,支持软件配置管理(SCM)工具,可以执行基于APACHE ANT和APAC ...

  2. Sql server时间转时间long

    DATEDIFF( S, '1970-01-01 00:00:00', a.endor_date ) - 8 * 60*60 ) actionTime, SELECT DATEADD(S,116070 ...

  3. POJ 2385 Apple Catching ( 经典DP )

    题意 : 有两颗苹果树,在 1~T 的时间内会有两颗中的其中一颗落下一颗苹果,一头奶牛想要获取最多的苹果,但是它能够在树间转移的次数为 W 且奶牛一开始是在第一颗树下,请编程算出最多的奶牛获得的苹果数 ...

  4. Ubuntu 14.04 DNS 丢失 | 中文输入法配置 (转载)

    1)彻底解决Ubuntu 14.04 重启后DNS配置丢失的问题: http://www.tuicool.com/articles/RVZn2y 2)Ubuntu 14.04中文输入法的安装   ht ...

  5. 【zabbix】zabbix 高可用架构的实现

    https://www.jianshu.com/p/249d47b089b4?utm_campaign=maleskine&utm_content=note&utm_medium=se ...

  6. qbzt day2 下午

    内容提要 高精 矩阵 筛法 先是高精除法 注意细节 高精度开方:神奇的竖式 以小数点为分界线,每两个位砍一刀 87654.321-->08|76|54|.32|1 大概就是先对第一位开方,然后相 ...

  7. C\C++语言中的宏多重展开和递归展开

    宏定义中的#,## 1. 宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组     2.记号粘贴操作符(token paste operator): ##            “## ...

  8. Using Groovy To Import XML Into MongoDB

    w https://trishagee.github.io/post/groovy_import_to_mongodb/

  9. SeaJS基本开发原则

    SeaJS基本开发原则在讨论SeaJS的具体使用前,先介绍一下SeaJS的模块化理念和开发原则.使用SeaJS开发JavaScript的基本原则就是:一切皆为模块.引入SeaJS后,编写JavaScr ...

  10. 三十五、robotframework中怎么将100转化成100.00

    1.将100转化成100.00