promise异步编程解决方案的理解

190 阅读2分钟

优点:对比传统回调跟事件更加合理也更加强大 主要体现在状态不可变、状态不受外界影响、异步操作以同步的方式表达,解决了回调地狱的问题

1、状态不受外界影响:promise有三个状态分别是pending(进行中)、fulfilled(已成功)、rejected(已失败),只有异步操作的结果可以改变状态,其他操作都无法改变这个状态。

2、状态不可变:一旦状态改变,就不会再变,哪怕再给promise添加回调,也会立刻得到这个结果,这与事件(Event)安全不同,事件的特点是,如果错过了再去监听,是得不到结果的

3、解决了回调地狱的问题:then的链式调用,解决了回调地狱的问题,以同步编程表达异步流程,更加清晰

4、缺点:无法取消promise、不设置回调内部会抛出错误但是不会反馈到外部、当处于pending时,无法得知状态(刚开始还是即将完成) 如果某些事件不断地反复发生,一般来说,使用 Stream 模式是比部署Promise更好的选择。

5、方法: Promise.try(),封装函数为所有操作提供统一的处理机制,同步方法立即执行,异步方法异步执行,且两者都可以使用then跟catch去处理下一步流程或者错误。 例如:Promise.try().then().catch()

promise.all(),接受一组promise对象,返回一个新的promise对象,只有当这一组promise对象都为成功,新的才为成功,只要有一个失败了,新的就为失败

promise.race(),接受一组promise对象,返回一个新promise对象,返回的对象状态为第一个改变状态的的结果

promise.allsettled,接受一组promise对象,返回新一个新的promise对象,且状态永远为成功,不过要等参数中的promise对象都完成之后才会返回

promise.any,接受一组promise对象,返回一个新的promise对象,只有当这一组promise对象都为失败,新的才为失败,只要有一个成功了,新的就为成功