Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象
ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。
我们先来看看它的使用方法:
  1. const promise = new Promise(function(resolve, reject) {
  2. // ... some code 这里写异步操作代码
  3. ajax(api1,function(res){
  4. // 异步操作成功,请求数据成功
  5. resolve(value);//将promise设置为resolved(完成状态)
  6. },function(error){
  7. // 异步操作失败,请求数据失败
  8. reject(error);////将promise设置为rejected (失败状态)
  9. })
  10.  
  11. });
resolve函数的作用是 在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject函数的作用是 在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去
 
Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。
  1. promise.then(function(value) {
  2. // success
  3. }, function(error) {
  4. // failure
  5. });

then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。

上面代码也可成如下形式

  1. promise.then(function(value) {
  2. // success
  3. }).catch(function(error){
  4. //error
  5. })

在success 里面我们可以发起第二个请求

  1. promise.then(function(value) {
  2. // success
  3. ajax(api2,function(res){
  4.  
  5. })
  6. }).catch(function(error){
  7. //error
  8. })

这个时候我们的两个请求明显的就有顺序

像是这样  new Promise(ajax1).then(ajax2).catch() ,使用了链式调用代替了嵌套结构,这样就避免了层层嵌套使的代码可读性太差!

关于Promise层层嵌套可读性差问题的更多相关文章

  1. 拥抱基于jquery.deferred的ajax,和层层嵌套回调的ajax说拜拜

    前言 在项目中,无论是维护自己的代码,还是重构他人的项目代码,看到层层嵌套,异常冗余的某个function,那时我们的内心肯定是奔溃的! 在jquery1.5版本之前,如果我们某个操作需要多个ajax ...

  2. Vue递归组件实现层层嵌套显示数据

    问题来自朋友...记录一下 需求是表格头部后端返回的数据中是不确定的 n维数据,表头存在于 listVo 字段中,如何实现层层显示呢? 温馨提示,以下内容为5张大图,请打开 WIFI 享用... 以下 ...

  3. ECMAScript6的Promise对象

    1. 概念 Promise对象用于异步(asynchronouss)计算,一个Promise对象代表着一个还未完成,但预期完成的操作. 2. 出现原因: 1)  如果你需要通过ajax发送多次请求,而 ...

  4. ES6 - promise对象

    Promise的设计初衷 我们使用ajax请求数据,得到数据后再对数据进行操作,可是有时候,对得到的数据进行操作的过程中,可能又要用到ajax请求,这时,我们的代码就变成了这样: $.ajax({ s ...

  5. promise async await使用

    1.Promise (名字含义:promise为承诺,表示其他手段无法改变) Promise 对象代表一个异步操作,其不受外界影响,有三种状态: Pending(进行中.未完成的) Resolved( ...

  6. 这次聊聊Promise对象

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 Promise是CommonJS提出的一种规范,在ES6中已经原生支持Promise对象,非ES6环境可以 ...

  7. 关于Promise的一些个人理解jQuery的deferred

      一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组), ...

  8. JS - Promise使用详解--摘抄笔记

    第一部分: JS - Promise使用详解1(基本概念.使用优点) 一.promises相关概念 promises 的概念是由 CommonJS 小组的成员在 Promises/A 规范中提出来的. ...

  9. ES6 Promise用法详解

    What is Promise? Promise是一个构造函数,接受一个参数(Function),并且该参数接受两个参数resolve和reject(分别表示异步操作执行成功后的回调函数.执行失败后的 ...

随机推荐

  1. 自编译Apache Spark2.3.3支持CDH5.16.1

    1 下载源代码文件 https://archive.apache.org/dist/spark/spark-2.3.3/ 2 解压后导入编辑器,修改依赖的Hadoop版本,下面截图是修改后的,要看自己 ...

  2. element-ui多选框模糊搜索输入文字闪动问题

    .el-select__tags { .el-select__input { width: 50px !important; } } 添加这段代码即可 <el-select v-model=&q ...

  3. 【5】学习C++之类的概念

    C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版.结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同:可以通过结构体来定义结构体变量,每个变量拥有相同的性 ...

  4. Tomcat关闭失败,SEVERE: Could not contact localhost:8005. Tomcat may not be running.

    SEVERE: Could not contact localhost:8005. Tomcat may not be running. Tomcat 启动后,关闭失败,显示以下 进入 java 的安 ...

  5. Pytorch--Dropout笔记

    dropout常常用于抑制过拟合,pytorch也提供了很方便的函数.但是经常不知道dropout的参数p是什么意思.在TensorFlow中p叫做keep_prob,就一直以为pytorch中的p应 ...

  6. LeetCode第十九题-链表节点的删除

    Remove Nth Node From End of List 问题简介;给定链表,从链表末尾删除第n个节点并返回其头部 例: 给定链表:1-> 2-> 3-> 4-> 5, ...

  7. get 和free

    1.ngx_pool_t ** ngx_get_pool()//use:getngx_pool_t **pool_address;ngx_pool_t *pool;pool_address = ngx ...

  8. memcached单机或热备的安装部署

    一.部署准备 1.安装Java 不建议使用系统默认Open JDK版本,需要手工另行安装.JDK版本建议为1.7+,若Java已安装完毕,则无需重复安装. 安装过程如下: (1)获取JDK安装包: ( ...

  9. 自己对Web标准的理解

    1.WEB标准 WEB分层: 1.结构层(HTML)   2.表现(css) 3.行为(js) web标准的优点: * 易于维护:只需更改css文件,就能改变整站的样式: * 页面响应快:HTML文档 ...

  10. A - Alice's Print Service ZOJ - 3726 (二分)

    Alice is providing print service, while the pricing doesn't seem to be reasonable, so people using h ...