多次调用then,每次res值都是new Promise的值

const promise = new Promise((resolve, reject) => {resolve("hahaha")
})
// 1.同一个Promise可以被多次调用then方法
// 当我们的resolve方法被回调时, 所有的then方法传入的回调函数都会被调用
promise.then(res => {console.log("res1:", res)    //hahaha
})
promise.then(res => {console.log("res2:", res)    //hahaha
})
promise.then(res => {console.log("res3:", res)    //hahaha
})

链式调用then

then方法传入的 "回调函数: 可以有返回值

then方法本身也是有返回值的, 它的返回值是Promise

如果返回的是一个普通值(数值/字符串/普通对象/undefined), 那么这个普通的值被作为一个新的Promise的resolve值

then的链式调用接受之前tnen返回的新Promise

const promise = new Promise((resolve, reject) => {resolve("hahaha")
})
promise.then(res => {return "aaaaaa"    //或包装Promise的resolve值返回// new Promise((resolve, reject) => {//   resolve("aaaaaa")// })
}).then(res => {               //这里.then的res是前一个then的返回值 resolve("aaaaaa")console.log("res:", res)     //aaaaaa
})promise.then(res => {// 如果没有返回值如下//或包装Promise的resolve值返回// new Promise((resolve, reject) => {//   resolve("undefined")// })
}).then(res => {                   //这里.then的res是前一个then的返回值 resolve("undefined")console.log("res:", res)         //undefined
})

如果返回的是一个Promise

const promise = new Promise((resolve, reject) => {resolve("hahaha")
})
promise.then(res => {return new Promise((resolve, reject) => {setTimeout(() => {resolve(111111)}, 3000)})
}).then(res => {console.log("res:", res)   //111111  3秒后打印 由返回的Promise状态决定
})

如果返回的是一个对象, 并且该对象实现了thenable

const promise = new Promise((resolve, reject) => {resolve("hahaha")
})
promise.then(res => {return {then: function(resolve, reject) {resolve(222222)}}
}).then(res => {console.log("res:", res)    //222222
})

(基础)Promise中then()方法使用,多次调用、链式调用相关推荐

  1. 彻底掌握 Promise-原生Promise的实现(二) Promise的链式调用

    在 彻底掌握 Promise- 原生 Promise 的实现(一) 已经初步实现了 promise 的简易版本,这距离实现完整版本的 Promise 还有一段距离,下面我们将在简易版本的基础上增加 P ...

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

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

  3. 实现同步请求_图解 Promise 实现原理(二)—— Promise 链式调用

    摘要 很多同学在学习 Promise 时,知其然却不知其所以然,对其中的用法理解不了.本系列文章由浅入深逐步实现 Promise,并结合流程图.实例以及动画进行演示,达到深刻理解 Promise 用法 ...

  4. 从 PHP、Promise、Android 和 iOS 代码看如何链式编程

    链式编程或者链式写法,是将多个方法 (函数) 通过点号 (.) 或者 (->)等符号链接在一起成为一句代码,这样不仅可以增强代码的可读性,而且每次链接,都是对对象的属性和状态进行一次操作和变化. ...

  5. java中链式调用_Java及Android中常用链式调用写法简单示例

    本文实例讲述了Java及Android中常用链式调用写法.分享给大家供大家参考,具体如下: 最近发现,目前大火的许多开源框架中,大多都使用了一种"(方法).(方法).(方法)"的形 ...

  6. JS 通过 Promise 实现延时执行,支持链式调用

    JS 通过 Promise 实现延时执行,支持链式调用 延时执行 sleep 版本一 同步执行 异步方式 sleep 版本二 支持链式调用 版本一 版本二 参考资料 延时执行 定义sleep函数 sl ...

  7. PHP中的__toString方法(实现JS里的链式操作)

    _toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错 Catchable fatal error: Object of class String could not be co ...

  8. promise的链式调用

    //new一个promise对象并在里面执行第一个异步方法 var promise = new Promise(function(resolve,reject){axios({method: 'pos ...

  9. Python数据结构与算法基础|第三期:代码实现——顺序存储队列与链式存储队列

    由于队列的动态由队头指针与队尾指针共同反映,所以我们在实现先入后出的同时还要实现队头元素与队尾元素的访问.对于普通的队列,我们使用列表实现其顺序存储,使用其它方法实现其链式存储. 顺序存储 由于我们使 ...

  10. (基础)Promise中catch()方法使用,捕获错误(拒绝)

    如果Promise抛出错误,then中没有处理就会报错 报错情况 // 这样会报错,因为没有处理promise的拒绝 const promise = new Promise((resolve, rej ...

最新文章

  1. SFTP命令基本使用
  2. EasyUI Pagination 分页的两种做法
  3. java怎么删除List中的指定元素
  4. 最大公约数 数学,结论 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛
  5. Java ServletRequestListener监听器的使用
  6. 算法导论之python实现插入排序
  7. ppt复制切片器_听说你还不会用切片器?比筛选好用100倍,小白也能学会!
  8. java 读取换行_Java中的换行字符读取 - java
  9. [ARM-assembly]-ARMV8-A64指令编码介绍
  10. 【项目记录】雪球网股票组合数据爬虫(包括雪球模拟登录代码)
  11. 办公软件的安装,简单操作进行安装office操作步骤。
  12. Consul 注册中心介绍以及搭建
  13. 用System中System.setOut()方法修改输出方式
  14. 如何创建自己的 Google Chrome 扩展程序
  15. R语言时间序列分析-根据aic值选择arima模型
  16. 转发和重定向的区别(forward和redirect的区别)
  17. Visitor模式实践
  18. docker 镜像启动并完成服务部署
  19. 高德地图哪个语音包最好_高德地图app怎么录制语音包?高德地图将自己的语音用作导航语音包的方法介绍...
  20. 【LaTeX应用】LaTeX绘图

热门文章

  1. 超声波无线充电电动牙刷方案开发设计
  2. 2020Google开发者大会总结
  3. Vot-Toolkit环境配置指南
  4. Python学习—字典
  5. Starbound正式版的Mod制作(二)nbsp;…
  6. 2022 最新Robots.txt文件教程
  7. CC00088.CloudKubernetes——|KuberNeteskubeadm.V17|5台Server|——|kubernetes验证|dashboard配置|
  8. 说说vector的emplace_back和push_back
  9. android edittext怎样获取输入的内容,如何获取edittext中输入的内容?
  10. ps去水印(操作流程)