异步处理方式
1.异步处理的几种方式
- 纯粹的异步回调函数callback
- promise方法
- (async,await)
2. 纯粹的异步回调函数callback
- 每次封装都要带上callback
- 剥夺函数return能力
3. promise方法
-
可以轻松处理多个异步等待合并
-
不需要层层传递callback
-
没有剥夺函数return能力
-
本质
- 是一个对象,不是函数
- 对象可以保存状态,除闭包外的函数,函数执行完都会返回状态
-
三个状态
- pending:进行中
- fulfilled:已成功
- rejected:已失败
-
使用
-
使用步骤:
- 1-初始化,
- 2-在promise函数中写异步代码,
- 3-获取异步数据(成功,失败)
-
初始化
const promise = new Promise((resolve, reject) => { })
-
resolve将pending进行中状态修改为fulfilled已成功状态
-
reject将pending进行中状态修改为rejected已失败状态
-
通过resolve和reject修改了promise状态之后,promise状态就凝固不可再改变
-
分别获取promsie成功和失败后的数据
promsie.then((res)=>{ }, (error)=>{ })
-
-
Promise解决回调地狱
-
什么是回调地狱
- 链式多层内部嵌套调用,一层接一层
-
Promise解决回调地狱(then -> return -> then -> return -> then)
-
在promise函数then回调里返回新的Promise函数然后在通过then进行回调
const hotList = Model.getHotList() hotList.then(res => { console.log(res) return bookModel.getMyBookCount() }) .then(res => { return bookModel.getMyBookCount() }) .then(res => { console.log(res) })
-
-
Promise解决回调地狱的前提是返回的都是Promise对象
-
如果遇到非Promise对象,需要转换成Promise对象
- 思路1
const _promiseTrans = function(func){ return function(params = {}) { new Promsie((resolve, reject) => { const args = Object.assing(params, { success: (res) => { resolve(res) }, fail:(error) => { reject(error) } }) func() }) } }
-
4.(async await)
-
ES2017提出
-
理论上是最佳的处理异步的方案
网友评论