总结:Promise函数的出现极大的解决了Js中的异步调用代码逻辑编写太过复杂的问题,Promise对象让异步调用函数的流程显得更加的优雅,也更容易编写。

  举例:

    1. 异步调用:

      假设现在我的一个页面中的一条数据需要我去后台查询两个接口才能完全返回,废话不说下面上代码:

function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//这里会继续请求第二个接口,获取剩下的数据内容
loadXMLDoc2(xmlhttp.responseText)
}
}
xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
xmlhttp.send();
}
//loadXMLDoc2和loadXMLDoc方法类似,此处就不再详细写。。。

  此时是通过两个接口查询所有的数据,那如果是三个或者四个或者更多呢....,当然也是可以这种方式来实现的,但是后期维护起来的成本就会逐倍增加,因为后面维护的小伙伴会通过你写的代码去逐层去走,假如第二个接口的数据出现问题也要从第一个接口的代码处开始捋,这样就会给维护扩展工作带来很大的不便。

  但是如果我们用Promise对象来重构这段代码,整个流程就会看起来清晰,废话不多说继续上代码:

  

function loadXMLDoc()
{
  var load_Promise = new Promise(function(resolve, reject){
    var xmlhttp;
     if (window.XMLHttpRequest)
  {
  // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
  xmlhttp=new XMLHttpRequest();
  }
  else
  {
  // IE6, IE5 浏览器执行代码
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
  //这里会继续请求第二个接口,获取剩下的数据内容
  //loadXMLDoc2(xmlhttp.responseText)
          resolve(xmlhttp.responseText);//这里是用来then方法中接受参数的时候调用
  }
  }
  xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
  xmlhttp.send(); });
    return load_Promise;
}
//调用方式
loadXMLDoc().then(function(data){
  //data就是指的是我们传入的xmlhttp.responseText;
  //此时可以处理data的数据结构等等
  ...
  //在最后一个定要return一个Promise对象 不然我们的链式调用就会断
  return loadXMLDoc2();
}).then().then().catch();

  此处我们通过promise对象来重构了我们异步操作的代码,整个代码的流程看起来会比较舒服,也就是用一个同步的方式来编写了异步的操作,对于那些不太熟悉异步操作原理的人来说,使用Promise对象的方式也会更加容易接受。

        

ES6的promise函数用法讲解的更多相关文章

  1. ES6关于Promise的用法详解

    Node的产生,大大推动了Javascript这门语言在服务端的发展,使得前端人员可以以很低的门槛转向后端开发. 当然,这并不代表迸发成了全栈.全栈的技能很集中,绝不仅仅是前端会写一些HTML和一些交 ...

  2. ES6关于Promise的用法

    Promise 对象用于一个异步操作的最终完成(或失败)及其结果值的表示.简单点说,它就是用于处理异步操作的,异步处理成功了就执行成功的操作,异步处理失败了就捕获错误或者停止后续操作. 它的一般表示形 ...

  3. 阿里前端测试题--关于ES6中Promise函数的理解与应用

    今天做了阿里前端的笔试题目,原题目是这样的 //实现mergePromise函数,把传进去的数组顺序先后执行,//并且把返回的数据先后放到数组data中 const timeout = ms => ...

  4. 解读Es6之 promise

            单线程:  在同一时间只能有同一任务进行.JavaScript就是一门单线程语言                 当有多个任务需要进行时,则需要进行排队,前一个执行完毕才能执行下一个; ...

  5. ES6 Promise 用法讲解

    Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...

  6. ES6 Promise用法讲解

    所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果. ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个 ...

  7. 转--ES6 Promise 用法讲解

    Promise是一个构造函数,自己身上有all.reject.resolve这几个眼熟的方法,原型上有then.catch等同样很眼熟的方法. 那就new一个 var p = new Promise( ...

  8. ES6之Promise用法详解

    一 前言 本文主要对ES6的Promise进行一些入门级的介绍.要想学习一个知识点,肯定是从三个方面出发,what.why.how.下面就跟着我一步步学习吧~ 二 什么是Promise 首先是what ...

  9. ES6之Promise的基本用法

    之前多次看过阮一峰的ES6教程,对Promise也简单的理解过,但是,由于没在项目中运用过,所以记忆的并不深刻,昨天在进行项目的改良,有一个地方需要用到Promise 所以就这样写了: onload函 ...

随机推荐

  1. 4-urllib库添加代理,添加请求头格式 模板

    urllib 库设置代理的方法 案例如下:

  2. SGU---101 无向图的欧拉回路

    题目链接: https://cn.vjudge.net/problem/SGU-101 题目大意: 给定你n张骨牌,每张牌左右两端有一个数字,每张牌的左右两端数字可以颠倒,找出一种摆放骨牌的顺序,使得 ...

  3. 4-4 R语言函数 tapply

    #对向量的子集进行操作 #tapply(参数):tapply(向量,因子/因子列表,函数/函数名) > x <- c(rnorm(5),runif(5),rnorm(5,1)) > ...

  4. 2016-3-19日小结:scrollTop

    <div id="div1" style="padding: 0; position:absolute;width: 200px;height: 200px;< ...

  5. 【洛谷】【堆】P1168 中位数

    [题目描述:] 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[3], …, A[2k - 1]的中位数.即前1,3,5,……个数的中位数. ...

  6. java基础面试题(JVM篇)

    1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被编译成能被 Java 虚拟机执行的字节码文件. ...

  7. MySQL——总结

    数据库命令:创建create database 数据库名 charset=utf8;删除drop database 数据库名;查看所有数据库:show databases;使用数据库:use 数据库名 ...

  8. docker常用命令(一)

    1. docker命令 docker images //查看本地镜像 docker rmi 镜像名称:标签名称 //删除一个镜像 docker rm 容器ID //删除一个容器 docker comm ...

  9. 网络编程之OSI七层协议

    七层协议: 应用层 表示层 会话层 传输层 网络层 数据连接层 物理连接层 1.物理连接层: 实现计算机之间物理连接,传输的数据都是010101的二进制 电信号工作原理:电只有高低电频 2.数据链路层 ...

  10. 51 Nod 1107 斜率小于0的连线数量 (转换为归并求逆序数或者直接树状数组,超级详细题解!!!)

    1107 斜率小于0的连线数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   二维平面上N个点之间共有C(n,2)条连线.求这C(n,2)条线中斜率小于0的线 ...