[例会]JavaScript异步解决方案Promise

在JavaScript中,为了避免诸如由于加载图片时间过长,导致后面的任务长时间等待这种情况的发生,代码执行需要改变方式,不能再完全依次序执行,而是要能够“跳过”部分代码,待其他某些代码执行完后,再来执行,这就称为异步。

JavaScript中的异步大致有以下几种:callback、Promise、Generator、Async。本次报告介绍的是Promise。

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件的结果,它提供统一的 API,各种异步操作都可以用同样的方法进行处理。它最早由社区提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。它的状态由异步操作的结果决定,不受外界影响,且状态改变后就不会再发生改变。

相比之前的异步解决方案,Promise的优势是可以将异步操作以同步操作的流程表达出来,且提供统一的接口,使得控制异步操作更加容易。但也有其缺陷,首先,Promise对象新建后就会立即执行,无法中途取消;其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部;最后,当处于pending状态时,无法得知目前进展到哪一个阶段(刚开始或即将结束)。

使用Promise的方法为

promise

首先创建一个Promise实例,其中,resolve函数和reject函数分别是将Promise对象的状态从“未完成”变为“成功”或“失败”。

然后使用then方法来指定成功或失败状态的回调函数,参数为两个函数,分别是成功和失败后的操作,其中,第二个函数可以省略。

此外,也可以使用catch方法来指定失败状态时的回调函数,其实是then(null, rejection)的别名。

上面代码的运行结果为:

promise2

可看出执行顺序发生了改变。

与会人员:

教师:杨矫云、吴玺、阙夏

学生:陈绪、丁会通、段优、江思源、刘杰、明鉷、唐晨、腾越、肖永博、严金戈、殷越

请假人员:韩朋、景波、王雨婷

anyShare分享到:
This entry was posted in 例会. Bookmark the permalink.

发表评论