,译为承诺,是 异步编程 的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大
在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码
阅读上面代码,是不是很难受,上述形成了经典的 回调地狱
现在通过的改写上面的代码
瞬间感受到解决异步操作的优点:
- 链式操作减低了编码难度
- 代码可读性明显增强
下面我们正式来认识:
对象仅有三种状态
- (进行中)
- (已成功)
- (已失败)
- 对象的状态不受外界影响,只有异步操作的结果,可以决定当前是哪一种状态
- 一旦状态改变(从变为和从变为),就不会再变,任何时候都可以流程
认真阅读下图,我们能够轻松了解整个流程
对象是一个构造函数,用来生成实例
构造函数接受一个函数作为参数,该函数的两个参数分别是和
- 函数的作用是,将对象的状态从“未完成”变为“成功”
- 函数的作用是,将对象的状态从“未完成”变为“失败”
构建出来的实例存在以下方法:
- then()
- catch()
- finally()
then()
是实例状态发生改变时的回调函数,第一个参数是状态的回调函数,第二个参数是状态的回调函数
方法返回的是一个新的实例,也就是能链式书写的原因
catch
方法是 或 的别名,用于指定发生错误时的回调函数
对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止
一般来说,使用方法代替第二个参数
对象抛出的错误不会传递到外层代码,即不会有任何反应
浏览器运行到这一行,会打印出错误提示,但是不会退出进程
方法之中,还能再抛出错误,通过后面方法捕获到
finally()
方法用于指定不管 对象最后状态如何,都会执行的操作
构造函数存在以下方法:
- all()
- race()
- allSettled()
- resolve()
- reject()
- try()
all()
方法用于将多个 实例,包装成一个新的 实例
接受一个数组(迭代对象)作为参数,数组成员都应为实例
实例p的状态由、、决定,分为两种:
- 只有、、的状态都变成,的状态才会变成,此时、、的返回值组成一个数组,传递给p的回调函数
- 只要、、之中有一个被,的状态就变成,此时第一个被的实例的返回值,会传递给的回调函数
注意,如果作为参数的 实例,自己定义了方法,那么它一旦被,并不会触发的方法
如果没有自己的方法,就会调用的方法
race()
方法同样是将多个 实例,包装成一个新的 实例
只要、、之中有一个实例率先改变状态,p的状态就跟着改变
率先改变的 实例的返回值则传递给的回调函数
allSettled()
方法接受一组 实例作为参数,包装成一个新的 实例
只有等到所有这些参数实例都返回结果,不管是还是,包装实例才会结束
resolve()
将现有对象转为 对象
参数可以分成四种情况,分别如下:
- 参数是一个 实例,将不做任何修改、原封不动地返回这个实例
- 参数是一个对象,会将这个对象转为 对象,然后就立即执行对象的方法
- 参数不是具有方法的对象,或根本就不是对象,会返回一个新的 对象,状态为
- 没有参数时,直接返回一个状态的 对象
reject()
方法也会返回一个新的 实例,该实例的状态为
方法的参数,会原封不动地变成后续方法的参数
将图片的加载写成一个,一旦加载完成,的状态就发生变化
通过链式操作,将多个渲染数据分别给个,让其各司其职。或当下个异步请求依赖上个请求结果的时候,我们也能够通过链式操作友好解决问题
通过实现多个请求合并在一起,汇总所有请求结果,只需设置一个即可
通过可以设置图片请求超时
- https://blog.csdn.net/weixin_/article/details/?spm=1001.2014.3001.5502
希望本文能够对您有所帮助!如果您有任何问题或建议,请随时在评论区留言联系 章挨踢(章IT)
谢谢阅读!
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10793.html