首先,then的返回值也是一个promise对象,所以它可以用链式语法,但是它的的返回值是一个与调用它的并不是同一个对象。

let p1 = new Promise(function(){})
let p2 = p1.then((resolve,reject)=>{})
console.log(p1 === p2)//false

以上的代码可以说明p1.then()的结果是与p1不用的一个promise对象。p2的状态和值由以下规则来确定:

1.如果p1的状态是pending,那么p2的状态也是pending。

2.如果p1的状态是resolved,then会去执行resolve(),那么p2的状态由resolve()的返回值决定。

  • 如果resolve()的返回值不是一个promise对象,那么p2的状态是resolved,且p2的值就是resolve()的return值。
  • 如果resolve()的返回值是一个promise对象,那么p2的状态以及值由这个promise对象为准。
  • 如果resolve()的返回值内部出现了错误(或者是用户抛出错误),那么p2的状态是rejected,且p2的值就是错误对象。

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

  • 如果reject()的返回值不是一个promise对象,那么p2的状态是resolved,且p2的值就是resolve()的return值。
  • 如果reject()的返回值是一个promise对象,那么p2的状态以及值由这个promise对象为准。
  • 如果resolve()的返回值内部出现了错误(或者是用户抛出错误),那么p2的状态是rejected,且p2的值就是错误对象。
let p1 = new Promise(()=>{});
let p2 = p1.then((resolve,reject)); // p2也是一个promise对象。
console.dir(p1); // pending
console.dir(p2); // pending
let p1 = new Promise((resolve,reject)=>{ resolve()});
let p2 = p1.then(resolve=>{return 1},reject=>{}); // p2也是一个promise对象。console.dir(p1);  // resolved, undefined
console.dir(p2); // resolved, 1
let p1 = new Promise((resolve,reject)=>{ resolve()});
let p2 = p1.then(resolve=>{return new Promise((resolve,reject)=>{ resolve({a:1}) });
}, resject=>{}); console.dir(p2); // resolved, {a:1}
let p1 = new Promise((resolve,reject)=>{ resolve()});
let p2 = p1.then(resolve=>{console.log(abc);// 这里故意犯错
}, reject=>{}); console.dir(p2);//rejected  错误对象

Promise中then的返回值相关推荐

  1. sweetalert 2.0 ajax,处理SweetAlert2中的AJAX返回值

    我使用带有AJAX请求的SweetAlert2 Popup.一旦用户点击提交,我执行请求. 在PHP文件中,我对提交的数据进行了一些验证,根据结果,我想在SweetAlert2中为用户提供反馈作为信息 ...

  2. SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

    1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java. ...

  3. python函数内部返回的值_Python中函数的返回值示例浅析

    前言: 前面我们介绍了简单的介绍了函数和函数的参数,今天我们来说一下Python中函数的返回值. 函数的返回值:函数运算的结果,需要进一步的操作时,给一个返回值return用来返回函数的结果,如果没有 ...

  4. python函数返回值_Python中函数的返回值示例浅析

    前言: 前面我们介绍了简单的介绍了函数和函数的参数,今天我们来说一下Python中函数的返回值. 函数的返回值:函数运算的结果,需要进一步的操作时,给一个返回值return用来返回函数的结果,如果没有 ...

  5. JAVA中返回值为字母时_LeetCode#524通过删除字母匹配到字典里最长单词-java中CompareTo方法用法以及Comparator中Compare方法返回值...

    import java.util.Collections; import java.util.Comparator; import java.util.List; /* 524. 通过删除字母匹配到字 ...

  6. 不显示参数名_第51p,万能参数与返回值,Python中函数的返回值

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第51篇文章,第三阶段的课程:Python进阶知识:详细讲解Python中的函数(四)====>函数的参数与返回值(下篇). ...

  7. 决定c++语言中函数的返回值类型的是,全国2009年10月高等教育自学考试C++程序设计试题及部分参考答案...

    全国2009年10月高等教育自学考试 C++程序设计试题 课程代码:04737 一.单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码 ...

  8. 解决IDEA中自动生成返回值带final修饰的问题

    解决IDEA中自动生成返回值带final修饰的问题 参考文章: (1)解决IDEA中自动生成返回值带final修饰的问题 (2)https://www.cnblogs.com/andrew-303/p ...

  9. js中递归调用返回值为undefined问题

    js中递归调用返回值为undefined问题 问题重现 下面这个简单的递归函数 理论上弹出的是11 但是............. 问题解决 在函数调用处加return

  10. python返回值return用法_Python中return函数返回值代码实例用法

    本篇文章小编给大家分享一下Python中return函数返回值代码实例用法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. return 添加返回值 r ...

最新文章

  1. 自己学习Foundation一些类
  2. shell字符串截取总结
  3. c#对象集合去重_C# List集合去重操作注意点
  4. IIS6中配置PHP
  5. Boost:字符串的RLE压缩的测试程序
  6. HTML5如何添加图片遮罩,带有HTML5画布的putImageData的遮罩?
  7. SQL的主键和外键约束 小记
  8. 面向接口编程 (噬菌体) 不错的接口
  9. python像素处理_用python处理图片实现图像中的像素访问
  10. Nsrp实现juniper防火墙的高可用性【HA】!
  11. 人生真正拉开距离不是高考!是大学毕业后第一个十年
  12. 西南交大数据结构c语言版集合的并,交实验报告答案,数据结构(C语言版)实验报告 集合的交并差...
  13. 协创物联网合肥产业园项目远程预付费电能管理系统的设计与应用
  14. Cisco(思科)无线路由器
  15. FCN8s 转 tensorrt(通过wts文件)
  16. 降低漏洞风险的六大法宝!
  17. 反垃圾邮件系统|基于Springboot+vue 实现反垃圾邮件系统
  18. 基于JAVA面相高校学生的图书共享平台计算机毕业设计源码+数据库+lw文档+系统+部署
  19. 低代码、端到端,一小时构建IoT示例场景,声网发布灵隼物联网云平台
  20. 轻松熊喵喵 -- 名词解释(自用)

热门文章

  1. 天王表的网络营销战略
  2. python 解压文件 重名_Python批量重命名压缩文件
  3. 使用vot-toolkit-python测试VOT2020
  4. IDEA使用/配置指南(从入门到精通)_by瞎琢磨先生
  5. w10桌面计算机图标箭头去除,win10桌面图标有个箭头如何去掉_去掉win10桌面图标箭头的方法-系统城...
  6. 计算View中的子View在View的superview中的坐标
  7. JTA transaction unexpectedly rolled back (maybe due to a timeout)
  8. java报错establishing_[Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket错误解决方法总结...
  9. nsis 安装 vcredist_x86
  10. 计算机硬件与哪些部分组成部分,计算机硬件组成及各部分功能有哪些?