1.关于then

then方法的作用是为Promise对象添加状态改变时的回调函数。

2.then的返回值

then()方法的返回值也是一个promise对象,所以它支持链式写法。但是要注意的是它的返回值是一个新的promise对象,与调用then方法的并不是同一个对象

那么既然 p2也是一个promise对象,那么,p2的状态(promiseStatus)和值(promiseValue)又由什么决定呢?我们先上结论,随后分别逐一验证。

3.p2的状态和值的确定规则

(1)当p1的状态是pending,则p2的状态也是pending

如前面所示代码

(2)当p1的状态是resolved,then()会去执行f_ok,则p2的状态由f_ok的返回值决定。

(2).1如果f_ok返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是                     f_ok函数的return值。

(2).2如果f_ok返回值是promise对象,则p2的状态及promiseValue以这个promise对象为准。

(2).3如果f_ok这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是                            rejected,且p2的promiseValue就是这个错误对象。

(3)如果p1的状态是rejected,then()会去执行f_err,则p2的状态由f_err的返回值决定。

(3).1如果f_err返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是                     f_err函数的return值。

(3).2如果f_err返回值是一个promise对象,则p2的状态及promiseValue以该promise对象为准。

(3).3如果f_err这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是                            rejected,且p2的promiseValue就是这个错误对象。

浅析Promise的then方法相关推荐

  1. 浅析Promise用法

    浅析Promise用法 要理解Promise要知道没有Promise的回调地狱 如何插入一段漂亮的代码片 Promise语法与then的用法 所谓Promise,简单说就是一个容器,里面保存着某个未来 ...

  2. [JavaScript] promise中.then()方法

    promise中.then()方法 promise的构造函数是同步执行 promise.then中的函数是异步执行 .then()异步执行 : 当此方法执行完后再执行内部的程序是避免了没有获取到数据 ...

  3. es6 Promise.prototype.catch()方法

    Promise.prototype.catch()方法 Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数. getJ ...

  4. es6 Promise.prototype.then()方法

    Promise.prototype.then()方法 Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的.它的作用是为 Promise ...

  5. 浅析 Promise

    前言 刚开始的时候自己对 Promise 的了解不是太深,看到 Promise 就头疼,然后看阮一峰老师的 ES6 标准入门的时候根本看不下去,应该是自己之前的水平太差了,不过最近在看的时候发现基本都 ...

  6. Promise的使用方法

    PS~: Promise是一个构造函数,自己身上有all.reject.resolve等几个方法,原型上有then.catch等几个方法. Promise 对象用于表示一个异步操作的最终状态(完成或失 ...

  7. 浅析项目工作量估算方法

    浅析项目工作量估算方法 马克思主义的认识论和实践观告诉我们,认识源于实践:总结实践经验.深化认识,进而指导实践,通过实践检验.修正认识(理论),螺旋式上升地提高认识. 项目管理作为一个实践性很强的学科 ...

  8. Uncaught (in promise)的解决方法,可能原因

    Uncaught (in promise) 的解决方法,可能原因:仅仅只是一种参考原因 我是因为copy的项目直接修改的,结果一直报错 Uncaught (in promise),检查发现接口请求数据 ...

  9. Uncaught (in promise) 的解决方法,可能原因

    Uncaught (in promise) 的解决方法,可能原因:仅仅只是一种参考原因 我是因为copy的项目直接修改的,结果一直报错 Uncaught (in promise),检查发现接口请求数据 ...

  10. Promise构造函数的方法1:Promise.resolve()和Promsie.reject()

    1.promise.resolve() 它是成功状态的Promsie的一种简写方式. 参数传递:(以下重点掌握一般参数的传递): 1)一般参数和参数为空的情况下,直接返回一个resolved状态的Pr ...

最新文章

  1. PCI BAR设置过程
  2. RIS实现系统的远程安装之三使用远程安装
  3. web项目部署到linux服务器出现的问题
  4. Bind 配置非递归服务器
  5. python类class基础
  6. ubuntu安装sublime
  7. Windows下配置Redis,并修改密码
  8. Inject Dll 过程
  9. 如何搭建克隆系统服务器,FOG Project网络克隆系统安装和搭建
  10. 完全卸载vs2013 2015
  11. jsp引进的js 显示404_【梅园大讲堂微课堂】Get超级大招!上海人才引进云申报权威解读来了...
  12. 嵌入式linux学习笔记(2)
  13. 爬取mzi.com妹子图片网站(requests库)
  14. 论文页眉设置 奇偶页页眉均为章序及章标题 论文按章节设置页眉
  15. 【新书推荐】卡神之路,不过如此
  16. NOIP 2013 华容道
  17. DY用辅助软件快速上热门
  18. [原创]中国象棋翻翻棋,休闲,对战,娱乐,小游戏,jQuery小游戏,下载即用,代码注释全(附源码)
  19. 解决Redis中Key值带有特殊字符问题
  20. Jmeter 性能测试的基础了解

热门文章

  1. Unity网游开发生存指南—蒸汽之城
  2. maven 解决Cannot access alimaven以及Process terminated
  3. 三年高级开发,六年成为架构师,到CTO我用了12年
  4. 为什么四大文明古国到现在只剩中国了
  5. 数字人民币的基础-共识与信任
  6. 连续分配存储管理,覆盖交换和存储碎片
  7. CefSharp截取完整网页图片,网页截图
  8. dub的sdl配置文件中文帮助
  9. 【UVA 1589 --- Xiangqi】
  10. tableau必知必会之学做三个集合的维恩图(文氏图)Venn diagram(二)