说起promise,大家用都都比较多,简单的说是对异步请求进行了二次封装,避免回调地狱的出现,但有的小伙伴觉得不好理解。接下来,结合生成器给大家解释一下。
首先看下代码:
var pro = function(){
return new Promise((resolve,reject){
if(true){
resolve('success')
}else{
reject('error')
}
})
}
var p = pro();
p.then(v=>console.log(v),e=>console.log(e)) success、error
这是promise最基础的使用方法,解决了回调函数的层层嵌套的问题
接下来看下generator
什么是generator,字面意思就是生成器,从字面上来看就是用于生成迭代器对象的函数,看下代码就明白了:
function* gen(){
yield 'hello harden'
yield 'hello world'
}
var g = gen() -->迭代器对象
g.next() --> {value:'hello harden',done:false}
g.next() --> {value:'hello world',done:true}
生成器函数执行后返回的是迭代器对象,迭代器对象必须通过调用next()方法执行函数到第一个yield函数处,根据返回值的done属性决定是否继续迭代器是否迭代完毕。
最后聊下async 和 await
var pro = function(){
return new Promise((resolve,reject){
resolve('success')
}
}
async function asy(){
let a = await pro()
return a
}
asy().then(v=>console.log(v)) 'success'
大家发现async和generator有什么不同的了吗?genertor函数返回的是迭代器对象,而async 返回的是promise对象。generator需要手动调用next方法获取值,而async函数自动开启迭代,使得异步过程的写法和同步过程写法保持一致,当然也存在co和thunk模块可以自动开启生成器的迭代。
小结:本文简单介绍了promise/generator/async 三者的使用方法,以此来记录自己对es6异步这块的理解,欢迎大家批评指正,邮箱:529309498@qq.com