我们预先设定一个场景,假设我们要请求三次办事器,每一次的请求依附上一次请求的结不雅,如下:
then 办法返回一个新的 Promise 对象, then 办法的链式调用避免了 CallBack 回调地狱
营业代码如下
- async function getData(){
- var res1 = await getDataAsync('/page/1?param=123')
- console.log(res1)
- var res2 = await getDataAsync(`/page/2?param=${res1.data}`)
- console.log(res2)
- var res3 = await getDataAsync(`/page/2?param=${res2.data}`)
- console.log(res3)
- }
比较 Promise 感到怎么样?是不是异常清楚,然则 async/await 是基于 Promise 的,因为应用 async 润饰的办法最终返回一个 Promise , 实际上, async/await 可以看做是应用 Generator 函数处理异步的语法糖,我们来看看若何应用 Generator 函数处理异步
五、Generator
起首异步函数依然是
- function getDataAsync(url){
- return new Promise((resolve, reject) => {
- setTimeout(()=> {
- var res = {
- url: url,
- data: Math.random()
- }
- resolve(res)
- }, 1000)
- })
- }
应用 Generator 函数可以如许写
- function*getData(){
- var res1 = yield getDataAsync('/page/1?param=123')
- console.log(res1)
- var res2 = yield getDataAsync(`/page/2?param=${res1.data}`)
- console.log(res2)
- var res3 = yield getDataAsync(`/page/2?param=${res2.data}`)
- console.log(res3))
- }
然后我们如许慢慢履行
- var g = getData()
- g.next().value.then(res1=> {
- g.next(res1).value.then(res2=> {
- g.next(res2).value.then(()=> {
- g.next()
- })
- })
- })
膳绫擎的代码,我们慢慢调用遍历器的 next() 办法,因为每一个 next() 办法返回值的 value 属性为一个 Promise 对象
推荐阅读
Victor告诉记者,在设备全部治理周期中,安然是最特别的一环,它不仅仅是贯穿全部周期,更重要的是,它必须在>>>详细阅读
本文标题:浅谈JavaScript中的异步处理
地址:http://www.17bianji.com/lsqh/36972.html
1/2 1