为了账号安全,请及时绑定邮箱和手机立即绑定

为什么说promise不能取消是一个缺点

为什么说promise不能取消是一个缺点

杨魅力 2018-11-14 14:14:57
什么场景下我需要取消一个promise?我不理解的地方:http是无状态的,那取消是不是意味着新的请求?还是说取消仅是本地取消,不处理之前请求的结果?
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

Promise 的设计就是一个状态机,pending 到 resolve / reject 的状态变换是单向且唯一的,没有所谓的 cancel 状态。cancel 的加入会带来更多的状态问题,并不适合 Promise 这一模式来处理(这类场景下,RxJS 这类 FRP 的方案应该更为适合)。

cancel 会带来什么状态问题呢?拿电商的退款来举例子。你买了一个东西(开始一个 pending 的 promise),然后东西还没收到(还没 resolve),你后悔了,点击了退款(把状态改为 cancel),但这时退款流程也不能立刻生效,需要审核(cancel 后不能立刻 reject),那这时候你发工资了,又不想退款了,又点了【取消退款】,这时候又是一个异步的状态更改(把 cancel 再 cancel 掉),而【取消退款】也是异步的,你还能取消【取消退款】的操作(把 cancel 在 cancel 掉前再 cancel 掉?)别忘了,这时候每一步状态变化还都可以对应到 resolve 和 reject 呢。好的同学们,接下来请画出流程的状态变化图,并编码实现这个支持 cancel 的 promise?

这是一道送命题啊。


查看完整回答
反对 回复 2018-12-21
  • 1 回答
  • 0 关注
  • 708 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信