当前位置:网站首页 > 技术博客 > 正文

js es6 symbol



在这里插入图片描述



,译为承诺,是 异步编程 的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大

在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码

 

阅读上面代码,是不是很难受,上述形成了经典的 回调地狱

现在通过的改写上面的代码

 

瞬间感受到解决异步操作的优点:

  • 链式操作减低了编码难度
  • 代码可读性明显增强

下面我们正式来认识:

对象仅有三种状态

  • (进行中)
  • (已成功)
  • (已失败)
  • 对象的状态不受外界影响,只有异步操作的结果,可以决定当前是哪一种状态
  • 一旦状态改变(从变为和从变为),就不会再变,任何时候都可以流程

认真阅读下图,我们能够轻松了解整个流程
在这里插入图片描述


对象是一个构造函数,用来生成实例

 

构造函数接受一个函数作为参数,该函数的两个参数分别是和

  • 函数的作用是,将对象的状态从“未完成”变为“成功”
  • 函数的作用是,将对象的状态从“未完成”变为“失败”

构建出来的实例存在以下方法:

  • 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)
谢谢阅读!

版权声明


相关文章:

  • linux系统中文件权限管理2024-12-10 13:01:04
  • 广州达测科技有限公司2024-12-10 13:01:04
  • linux curses2024-12-10 13:01:04
  • 方波微分电路输出波形2024-12-10 13:01:04
  • sscom3.3串口使用说明2024-12-10 13:01:04
  • spring boot增删改查项目2024-12-10 13:01:04
  • java如何给string数组赋值2024-12-10 13:01:04
  • 一句话木马作用2024-12-10 13:01:04
  • linux中的nice用法2024-12-10 13:01:04
  • 武侠之乱世魔枭2024-12-10 13:01:04