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 的数据。

posted @ 2022-07-26 11:16  Rionzii  阅读(36)  评论(0)    收藏  举报