总结: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. reactor模型框架图和流程图 libevent

    学习libevent有助于提升程序设计功力,除了网络程序设计方面外,libevent的代码里有很多有用的设计技巧和基础数据结构,比如信息隐藏.函数指针.c语言的多态支持.链表和堆等等,都有助于提升自身 ...

  2. dotnet core入门

    dotnet 命令 C:\Users\yshuangj\Desktop\dotnet>dotnet Usage: dotnet [options]Usage: dotnet [path-to-a ...

  3. 使用Yarn+Webpack+Babel6搭建React.js环境

    使用Yarn+Webpack+Babel6搭建React.js环境 Facebook开源的React.js已经改变了世人对前端UI的思考方式.这种基于组件方式的优势之一,就是使View更加的简单,因为 ...

  4. virtualbox+vagrant学习-2(command cli)-11-vagrant PowerShell命令

    PowerShell 格式: vagrant powershell [-- extra powershell args] 这将在主机上打开PowerShell提示符,进入正在运行的vagrant机器. ...

  5. Python自动化之form验证

    model里面进行数据验证 在类里面定义一个clean方法 class User(models.Model): def clean(self): #在这个可以做一些验证的操作 pass 还可以手动抛出 ...

  6. maven3 下载列表

    https://archive.apache.org/dist/maven/maven-3/ Parent Directory - 3.0.4/ 2012-09-11 09:37 - 3.0.5/ 2 ...

  7. Spring源码分析(十五)获取单例

    本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 之前我们讲解了从缓存中获取单例的过程,那么,如果缓存中不存在已经加载的单例be ...

  8. Jmeter之八大可执行元件及执行顺序

    初步接触Jmeter,对比LoadRunner进行熟悉,╮(╯▽╰)╭.毕竟我对LoadRunner还是比Jmeter熟悉. 1.配置元件 用来提供对静态数据配置的支持.例CSV Data Set c ...

  9. 1347: Last Digit (周期函数)

    1347: Last Digit Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: ...

  10. STM32F103 ucLinux内核没有完全启动

    STM32F103 ucLinux内核没有完全启动 从BOOT跳转到内核后,执行一长段的汇编语言,然后来到startkernel函数,开启C语言之旅. 但是内核输出不正常,如下所示: Linux ve ...