详解ES6 Promise对象then方法链式调用


Posted in Javascript onOctober 20, 2018

promise俗称链式调用,它是es6中最重要的特性之一

简单的说可以不停的then调用嵌套在调用(异步之后,链式调用方式执行回调),这种操作方式称为promise

then()方法的作用是Promise实例添加解决(fulfillment)和拒绝(rejection)状态的回调函数。then()方法会返回一个新的Promise实例,所以then()方法后面可以继续跟另一个then()方法进行链式调用。

let p = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'success');
});
p.then(
  res => {
    console.log(res);
    return `${res} again`;
  }
)
  .then(
    res => console.log(res)
  );
// 连续
// success
// success again

但是前一个then()方法中的回调函数中又可能返回一个Promise实例,这时候后面一个then()方法中的回调函数会等前一个Promise实例的状态发生变化才会调用。

let p = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'success');
});
p.then(
  res => {
    console.log(res);
    return new Promise((resolve, reject) => {
      setTimeout(resolve, 1000, 'success');
    });
  }
)
  .then(
    res => console.log(res)
  );
// 相隔1000ms
// success
// success

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 中 null、NaN和undefined的区别总结
Apr 10 Javascript
json格式的时间显示为正常年月日的方法
Sep 08 Javascript
jQuery $.extend()用法总结
Jun 15 Javascript
JavaScript中消除闭包的一般方法介绍
Mar 16 Javascript
javascript格式化json显示实例分析
Apr 21 Javascript
前端js实现文件的断点续传 后端PHP文件接收
Oct 14 Javascript
概述如何实现一个简单的浏览器端js模块加载器
Dec 07 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
JavaScript中各数制转换全面总结
Aug 21 Javascript
JavaScript Array对象基本方法详解
Sep 03 Javascript
layui table去掉右侧滑动条的实现方法
Sep 05 Javascript
VUE使用draggable实现组件拖拽
Apr 06 Vue.js
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 #Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
Oct 20 #Javascript
angular4 获取wifi列表中文显示乱码问题的解决
Oct 20 #Javascript
vue 项目地址去掉 #的方法
Oct 20 #Javascript
VUE-cli3使用 svg-sprite-loader
Oct 20 #Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
Oct 20 #Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
Oct 19 #Javascript
You might like
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
JavaScript中使用构造器创建对象无需new的情况说明
2012/03/01 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
Bootstrapvalidator校验、校验清除重置的实现代码(推荐)
2016/09/28 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
2016/12/23 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
Python 深入理解yield
2008/09/06 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
Django实现分页功能
2018/07/02 Python
Python3+Appium安装使用教程
2019/07/05 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
关于Python解包知识点总结
2020/05/05 Python
Python selenium模拟手动操作实现无人值守刷积分功能
2020/05/13 Python
如何在python中实现线性回归
2020/08/10 Python
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
AOP的定义以及作用
2013/09/08 面试题
生产厂厂长岗位职责
2013/12/25 职场文书
银行柜员求职自荐书
2014/06/18 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
给老婆的检讨书1000字
2015/01/01 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
国庆阅兵观后感
2015/06/15 职场文书
校园安全主题班会
2015/08/12 职场文书
《确定位置》教学反思
2016/02/18 职场文书
css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效
2021/04/29 HTML / CSS
MySQL 时间类型的选择
2021/06/05 MySQL
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
MySql分区类型及创建分区的方法
2022/04/13 MySQL