then() 方法返回一个 Promise
链式调用:then里面回调函数(成功回调和失败回调),凡事这两个回调函数里面抛出错误或者返回一个已经是拒绝状态的 Promise。
那么 then 返回的 Promise 对象将是rejected状态,走下一个then里面的失败回调函数
 
catch() 方法返回一个Promise,并且处理拒绝的情况。它的行为与调用Promise.prototype.then(undefined, onRejected) 相同
 

try-catch

有catch穿透的效果

new Promise((resolve, reject) => {
resolve(1)
}).then(data => {
console.log(data)
return 2 }).then(data => {
console.log(data);
return Promise.reject(20) //一旦promise变为rejected直接走catch,不是一次性到最后的catch ,每一个then里面没有写失败回调函数,但是默认写了reason=>{throw reason}
//或者 resaon=>Promise.reject(reason) }).then(data => {
console.log(data)
}).catch(err => {
console.log(err)
})
//1 2 20

then两个回调函数

then两个回调函数,上一个then的promise状态变为rejected 状态,就走临近下一个then的失败回调函数,不会直接调到最后一个

//
new Promise((resolve, reject) => {
resolve(1)
})
.then(data => {
console.log(data)
return Promise.reject(20) }, err => {
console.log(err)
return 3
}) .then(data => {
console.log(data); }, err => {
console.log(err);
return 3 }) .then(data => {
console.log(data); }, err => {
console.log(err); })
//1 20 3

then链式调用里面含有异步操作

new Promise((resolve, reject) => {
resolve(1)
}).then(data => {
console.log(data)
return 2
}).then(data => {
console.log(data)
// then链式调用,如果里面有异步,需要返回新的promise对象,不然下一个then拿不到这个异步操作的结果
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3)
}, 1000); })
/* 异步操作直接写,下一个then的data就是默认值undefined。拿不到异步操作的结果
setTimeout(() => {
return 10
}, 1000);
*/
}).then(data => {
console.log(data)
})

中断promise链

return new Promise(()=>{})

最新文章

  1. Ubuntu 14.04下搜狗输入法崩溃重启
  2. 【转】MYSQL入门学习之十一:触发器的基本操作
  3. EasyUI-标签(Tabs)用法
  4. nyoj 1058部分和问题(DFS)
  5. myBatis出现Mapped Statements collection already contains value for
  6. Server.MapPath()获取绝对路径
  7. SqlServer中输出错误消息
  8. 工时统计的sql练习--包含时间处理
  9. VS代码生成工具ReSharper使用手册:配置快捷键
  10. r语言之生成随机序列,随机数生成函数及用法
  11. Zab: A simple totally ordered broadcast protocol(译)
  12. Python--Pycharm backup_ver1.py 控制台一直Backup FAILED
  13. Validation of viewstate MAC failed 解决办法
  14. 关于前端本地压缩图片,兼容IOS/Android/PC且自动按需加载文件之lrz.bundle.js
  15. python小白——进阶之路——day3天-———容器类型数据+Number类型强制类型转换
  16. 51nod--1069 Nim 游戏(博弈论)
  17. 三、activiti工作流-流程设计工具
  18. Linux(centos)系统各个目录的作用详解 推荐
  19. goaccess
  20. shell script中read的用法

热门文章

  1. 001_HyperLedger Fabric环境安装
  2. 《RabbitMQ》什么是死信队列
  3. SpringBoot常用配置,引入外部配置文件信息,热加载
  4. 2020-06-20:一句话总结ZK?
  5. Flutter 容器(7) - DecoratedBox
  6. 01从DataGrid中导入到Excel
  7. python使用zipfile递归压缩和解压缩文件
  8. 对于python装饰器结合递归的进一步理解
  9. Salesforce学习笔记之吐槽
  10. PhpStorm安装及破解流程