博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈Promise怎么取消或中断
阅读量:6274 次
发布时间:2019-06-22

本文共 1164 字,大约阅读时间需要 3 分钟。

用了这么久的Promise,写一下他的几种中断或者取消方案吧。

1、Promises/A+标准:原Promise对象的状态将跟新对象保持一致。

利用这一特性,当新对象保持“pending”状态时,原Promise链将会中止执行。

Promise.resolve().then(() => {    console.log('ok1')    return new Promise(()=>{})  // 返回“pending”状态的Promise对象}).then(() => {    // 后续的函数不会被调用    console.log('ok2')}).catch(err => {    console.log('err->', err)})复制代码

2、Promise.race竞速方法

利用这一特性,也能达到后续的Promise不再执行

let p1 = new Promise((resolve, reject) => {    resolve('ok1')})let p2 = new Promise((resolve, reject) => {    setTimeout(() => {resolve('ok2')}, 10)})Promise.race([p2, p1]).then((result) => {    console.log(result) //ok1}).catch((error) => {    console.log(error)})复制代码

3、当Promise链中抛出一个错误时,错误信息沿着链路向后传递,直至被捕获。

利用这一特性能跳过链中被捕获前的函数的调用,直至链路终点。

Promise.resolve().then(() => {    console.log('ok1')    throw 'throw error1'}).then(() => {    console.log('ok2')}, err => {         // 捕获错误    console.log('err->', err)}).then(() => {       // 该函数将被调用    console.log('ok3')    throw 'throw error3'}).then(() => {    // 错误捕获前的函数不会被调用    console.log('ok4')}).catch(err => {    console.log('err->', err)})复制代码

小马,献丑了,欢迎大家指出错误,一起交流交流。

喜欢的点个赞吧。 大家加油!

转载于:https://juejin.im/post/5cc093635188252e754f2239

你可能感兴趣的文章
CheckBox:屏蔽setChecked方法对OnCheckedChangeListener的影
查看>>
java线程池
查看>>
UI面试内容
查看>>
Linux之RPM详解
查看>>
Windows Azure 常见问题及测试题
查看>>
flex DateChooser
查看>>
天天晚上打车--我对滴滴打车的想法
查看>>
由于MTU值设置不当造成的某些网站无法登录解决
查看>>
线程池
查看>>
聊聊高并发之隔离术
查看>>
JenKins 构建Github项目
查看>>
MySQL中from_unixtime与unix_timestamp差别
查看>>
LVS+KEEPALIVED实现高可用负载均衡架构
查看>>
Armadillo之行向量(row vector)
查看>>
搭建一个master对应2个slave
查看>>
Java 线程池的使用好处
查看>>
MySQL 双主 + keepalived 实现 HA
查看>>
FbinstTool最简单制作U盘启动ISO格式(金测)
查看>>
Android反射机制实现与原理
查看>>
浅谈大数据的标签管理
查看>>