u=426744177,1467744783&fm=11&gp=0.jpg

当我学习es6的时候,Promise是比较新的解决回调的方案,然后今年去年就比较流行asynac来解决咯;

首先回顾一下回调地狱是怎么形成的;

function ajax(fn){

setTimeout(()=>{
console.log('你好')
},1000)

}

//callback回调地狱
ajax(()=>{
console.log("执行结束")
ajax(()=>{
ajax(()=>{
ajax(()=>{
})
})
})
console.log("执行结束")
})

这个是比较经典的callback回调地狱啦,我们如果这样书写嵌套,一些参数可能会比较恼人,而且修改也不好修改

所以第一代解决方案Promise,意思就是一个承诺,拥有2个参数,一个是接受,一个是拒绝,然后用then方法接受,相对来说比较优雅:

function delay(word){
return new Promise((reslove,reject)=>{
setTimeout(()=>{
reslove(word)
},2000)
})
}

//Promise解决方案1
delay('孙悟空')
.then((word)=>{
console.log(word)
return delay('猪八戒')
})
.then((word)=>{
console.log(word)
return delay('沙悟净')
})
.then(word=>{
console.log(word)
})

这个相对于我们原始的方式,简直是太方便了,但是直到我看到asynac,直接傻瓜式的写法,也是很6了;

//asynac和await解决方案2
async function start(){
const word1 = await delay('孙悟空')
console.log(word1)
const word2 = await delay('猪八戒')
console.log(word2)
const word3 = await delay('沙悟净')
console.log(word3)
}

我们直接这样使用,await必须要跟它搭配使用,且必须存在于一个方法体,函数必须要asynac修饰,目的就是等待执行,就完美解决了异步回调造成的代码污染的情况;

下一章的koa的中间件就是利用asynac和await来实现的哟

标签: none

添加新评论