JavaScript Promise
JavaScript Promise
Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。
由于 Promise 是 ES6 新增加的,所以一些旧的浏览器并不支持,苹果的 Safari 10 和 Windows 的 Edge 14 版本以上浏览器才开始支持 ES6 特性。
构造 Promise
新建一个 Promise 对象:
| new Promise(function (resolve, reject) { // 要做的事情... }); |
Promise 的使用
Promise 构造函数只有一个参数,是一个函数,这个函数在构造之后会直接被异步运行,称之为起始函数。
起始函数包含两个参数 resolve 和 reject。
当 Promise 被构造时,起始函数会被异步执行。
resolve 和 reject 都是函数,其中调用 resolve 代表一切正常,reject 是出现异常时所调用的。
|
Promise 类有 .then() .catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数, .then() 可以将参数中的函数添加到当前 Promise 的正常执行序列, .catch() 则是设定 Promise 的异常处理序列, .finally() 是在 Promise 执行的最后一定会执行的序列。 .then() 传入的函数会按顺序依次执行,有任何异常都会直接跳到 catch 序列。
|
resolve() 中可以放置一个参数用于向下一个 then 传递一个值,then 中的函数也可以返回一个值传递给 then。
resolve()在进行多个异步操作的时候必须要有(即使里面没有放置参数),不然,后续then()代码无法运行。
then一个Promise对象的时候,有return的时候会按顺序依次执行,没有return的时候,按运行时间短到快的顺序异步执行。
但是,如果 then 中返回的是一个 Promise 对象,那么下一个 then 将相当于对这个返回的 Promise 进行操作。
reject() 参数中一般会传递一个异常给之后的 catch 函数用于处理异常,也可以使用throw()代替reject()。
但是请注意以下两点:
- resolve 和 reject 的作用域只有起始函数,不包括 then 以及其他序列;
- resolve 和 reject 并不能够使起始函数停止运行,别忘了 return。
这种返回值为一个 Promise 对象的函数称作 Promise 函数,它常常用于开发基于异步操作的库。
异步函数 async function 中可以使用 await 指令,await 指令后必须跟着一个 Promise,异步函数会在这个 Promise 运行中暂停,直到其运行结束再继续运行。
Promise 对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)。
通过回调里的 resolve(data) 将这个 promise 标记为 resolverd,然后进行下一步 then((data)=>{//do something}),resolve 里的参数就是你要传入 then 的数据。

浙公网安备 33010602011771号