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(()=>{})

09 promise then的更多相关文章

  1. Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012

    [Info   @09:03:33.737] ====================================================================[Info   @ ...

  2. 路由的Resolve机制(需要了解promise)

    angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会 1.在进入这个路由之前先懒加载对应的 .js $stateProvider .state ...

  3. angularJS中的Promise对象($q)的深入理解

    原文链接:a better way to learn AngularJS - promises AngularJS通过内置的$q服务提供Promise编程模式.通过将异步函数注册到promise对象, ...

  4. Promise 原理探究及其简单实现

    可移步 http://donglegend.com/2016/09/11/promise%E5%8E%9F%E7%90%86%E6%8E%A2%E7%A9%B6/ 观看 Promise是个什么玩意,大 ...

  5. 你所必须掌握的三种异步编程方法callbacks,listeners,promise

    目录: 前言 Callbacks Listeners Promise 前言 coder都知道,javascript语言运行环境是单线程的,这意味着任何两行代码都不能同时运行.多任务同时进行时,实质上形 ...

  6. JS 中Promise 模式

    异步模式在web编程中变得越来越重要,对于web主流语言Javscript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 jQuery和Dojo)添加了一种称为promise ...

  7. JavaScript 的 Promise

    先看这个 http://www.html5rocks.com/zh/tutorials/es6/promises/#toc-api  [JavaScript Promise 浏览器支持的Promise ...

  8. 聊一聊promise的前世今生

    promise的概念已经出现很久了,浏览器.nodejs都已经全部实现promise了.现在来聊,是不是有点过时了? 确实,如果不扯淡,这篇随笔根本不会有太多内容.所以,我就尽可能的,多扯一扯,聊一聊 ...

  9. promise async await使用

    1.Promise (名字含义:promise为承诺,表示其他手段无法改变) Promise 对象代表一个异步操作,其不受外界影响,有三种状态: Pending(进行中.未完成的) Resolved( ...

随机推荐

  1. tree命令编译使用

    有天在linux中使用tree命令时候显示--未找到命令  记下解决过程: wget ftp://mama.indstate.edu/linux/tree/tree-1.6.0.tgz tar xzv ...

  2. Pytorch_第九篇_神经网络中常用的激活函数

    神经网络中常用的激活函数 Introduce 理论上神经网络能够拟合任意线性函数,其中主要的一个因素是使用了非线性激活函数(因为如果每一层都是线性变换,那有啥用啊,始终能够拟合的都是线性函数啊).本文 ...

  3. java循环嵌套与跳转语句(break,continue)

    一 循环嵌套 嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构.while.do…while. for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套f ...

  4. Vue 使用$set动态给数据设置属性

    在实际的开发过程中,给表单元素绑定model的时候,绑定的元素的属性是根据后台数据动态生成的.如果使用常规的赋值方式,是无法更新视图的 需要使用, this.$set(dataName,keyName ...

  5. 简单认识Adam优化器

    转载地址 https://www.jianshu.com/p/aebcaf8af76e 基于随机梯度下降(SGD)的优化算法在科研和工程的很多领域里都是极其核心的.很多理论或工程问题都可以转化为对目标 ...

  6. vs2017引用vue组件中文乱码

    原因:文件默认编码格式为ASNI编码,需要改成UTF-8编码 解决方案: ①用记事本打开component.js文件 ②另存文件,修改编码为UTF-8编码,保存

  7. 题解 洛谷 P3332

    题目描述 权值线段树套线段树板子题 首先观察题目,判断为二维偏序问题 操作1为区间修改,所以一定是外部线段树维护权值,内部线段树维护所在区间,否则时间复杂度爆炸qwq 为方便查找,哈希时我采用哈希每个 ...

  8. Typora markdown代码块显示序号

    打开偏好设置,找到代码块 打开显示行号 然后关闭Typora重新打开 此时代码块就有行号了

  9. linux下top命令详细介绍

    linux下top命令详细介绍 top 命令是 Linux 下常用的系统资源占用查看及性能分析工具,能够实时显示系统中各个进程的资源(比如cpu.内存的使用)占用状况,top命令的执行结果是一个动态显 ...

  10. 【转】Windows10删除文件时却提示文件不存在的解决方案

    Windows10系统使用一段时间后用户都会定期进行删除清理系统垃圾,减少系统盘的容量占用,但在删除的过程中许多用户都有可能遇到无法删除的情况,如下为删除文件时却提示文件不存在的解决方案. 1.新建一 ...