• 异步和同步

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

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

  • 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. 《x86汇编语言:从实模式到保护模式 》学习笔记之:第一次编写汇编语言

    1.汇编语言源文件:first.asm mov ax,0x3f add bx,ax add cx,ax 2.用nasm编译成二进制文件:first.bin nasm -f bin first.asm ...

  2. (42)嵌入式项目中常用到的C语言技能总结

    嵌入式项目中常用到的C语言技能 1.指针 .结构体. 枚举. 联合.数组.字符串.链表七个专题 2.结构体指针.结构体的多重嵌套[结构体中嵌套结构体.结构体中嵌套枚举.联合体.结构体中嵌套函数指针.一 ...

  3. 你的MySQL服务器开启SSL了吗?(转载)

    最近,准备升级一组MySQL到5.7版本,在安装完MySQL5.7后,在其data目录下发现多了很多.pem类型的文件,然后通过查阅相关资料,才知这些文件是MySQL5.7使用SSL加密连接的.本篇主 ...

  4. uniapp开发

    问题1:去掉导航条 给一个单独的页面隐藏顶部的 导航栏 可以在pages.json里 单独的路由style下面配置  "app-plus": {"titleNView&q ...

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

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

  6. rm命令反向选择删除文件

    反向删除文件, 参考这篇文章. http://blog.csdn.net/web_go_run/article/details/46009723 shopt是设置shell的全局选项 shopt -p ...

  7. 005-spring-data-elasticsearch 3.0.0.0使用【三】-spring-data之Spring数据扩展

    续 1.8.Spring数据扩展 这些扩展使Spring Data在各种环境下的使用成为可能.目前大部分的整合都是针对Spring MVC. 1.8.1.Querydsl扩展 Querydsl是一个框 ...

  8. 双系统(win10+ubuntu)卸载Ubuntu系统

    之前装的双系统,Win10 和Ubuntu ,系统引导使用的是Ubuntu的Grup的引导, 直接删除Ubuntu会导致引导丢失,会很麻烦,win10直接会挂掉,后期恢复需要重建引导 安全删除思路,先 ...

  9. Krypton Suite of .NET WinForms Controls

    The Krypton Suite of .NET WinForms controls are now freely available for use in personal or commeric ...

  10. phpmyadmin和网页上面的乱码问题

    前段时间做了个留言板,但是总是出现乱码,而且出现了无法插入的情况:发现这么个问题:在phpmyadmin里面默认的编码是瑞士的一个编码:我就郁闷了为什么这么一个通用软件的编码放着UTF-8或者是GBK ...