详解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更改class和id的方法
Oct 10 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
Jul 10 Javascript
js 实现日期灵活格式化的小例子
Jul 14 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
jquery实现表格本地排序的方法
Mar 11 Javascript
JS返回iframe中frameBorder属性值的方法
Apr 01 Javascript
JS实现的网页背景闪电闪烁效果代码
Oct 17 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
Feb 03 Javascript
javascript实现随机生成DIV背景色
Jun 20 Javascript
Bootstrap基本插件学习笔记之折叠(22)
Dec 08 Javascript
vue 实现的树形菜的实例代码
Mar 19 Javascript
JS中如何优雅的使用async await详解
Oct 05 Javascript
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
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
2014/05/08 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
Bootstrap源码解读按钮(5)
2016/12/23 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
python tornado微信开发入门代码
2018/08/24 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
关于pytorch中网络loss传播和参数更新的理解
2019/08/20 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
校园招聘策划书
2014/01/09 职场文书
旅游网创业计划书
2014/01/31 职场文书
会议邀请书范文
2014/02/02 职场文书
大专学生求职自荐信
2014/07/06 职场文书
小学生学习保证书
2015/02/26 职场文书
python实现图片批量压缩
2021/04/24 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
使用Django框架创建项目
2022/06/10 Python
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL