当前位置:网站首页>JS提升:如何中断Promise的链式调用
JS提升:如何中断Promise的链式调用
2022-08-01 21:00:00 【The..Fuir】
如何中断Promise的链式调用?
问题:当promise状态改变时,他的链式调用都会生效,那如果我们有这个一个实际需求:我们有5个then(),但其中有条件判断,如当我符合或者不符合第三个then条件时,要直接中断链式调用,不再走下面的then,该如何操作?
我们知道Promise有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败),当状态从pending(进行中)变成fulfilled(已成功)或者rejected(已失败)的时候就会调用Promise的then方法, 如果一直在pending(进行中)状态的话,就不会执行到then方法了。
那我们就可以利用这一点去中断Promise的链式调用了,在回调函数中返回一个 pending(进行中) 状态的Promise 对象,这样后面的then方法就不会执行了。
这里的原理是利用了promise.then()返回的新 promise 的结果状态是由 then()指定的回调函数执行的结果决定。也就是说:
如果抛出异常, 新 promise 变为 rejected, reason 为抛出的异常
如果返回的是非 promise 的任意值, 新 promise 变为 resolved, value 为返回的值
如果返回的是另一个新 promise, 此 promise 的结果就会成为新 promise 的结果
所以我们在promise.then()返回了一个pending(进行中) 状态的Promise 对象,promise.then()返回的新 promise 的结果状态就一直是pending(进行中)的,后面的then方法也不会执行了。let p = new Promise((resolve, reject) => {setTimeout(() => { resolve('OK');}, 1000);}); p.then(value => {return new Promise(() => {});}) .then(value => { console.log(222);}) .then(value => { console.log(333);}) .catch(reason => {console.warn(reason);});
永不决议
new Promise(resolve=>{ resolve(1); }).then(value=>{ console.log(value) return 2 }).then(value=>{ console.log(2) return new Promise(()=>{}) }).then(value=>{ console.log(value); return 4; }).then(value=>{ console.log(value); return 5 }).catch(error=>{ console.log(error,'==='); })
原文链接:https://blog.csdn.net/cckevincyh/article/details/124796139
边栏推荐
猜你喜欢
随机推荐
Goroutine Leaks - The Forgotten Sender
使用员工管理软件,解锁人力生产力新水平,提高人力资源团队灵活性
The Internet giant development process
用户身份标识与账号体系实践
模板特例化和常用用法
虚拟机的IP地址自动变为127.0.0.1
tiup mirror init
SIPp installation and use
乐观锁批量跟新 纯SQL
Go Atomic
【Kaggle】Classify Leaves
Pytorch框架学习记录10——线性层
外骨骼机器人(七):标准步态数据库
360借条安全专家:陌生微信好友不要轻易加贷款推广多是诈骗
R语言 数据的关系探索
4.1 配置Mysql与注册登录模块
【luogu P1912】诗人小G(二分栈)(决策单调性优化DP)
2022年秋招,软件测试开发最全面试攻略,吃透16个技术栈
关于Request复用的那点破事儿。研究明白了,给你汇报一下。
Godaddy domain name resolution is slow and how to use DNSPod resolution to solve it