promise,Generator函数,async函数区别与理解
2019-03-05 本文已影响0人
Allan要做活神仙
2019-03-05-20:46 于钉钉
Promise
将原来的用 回调函数 的 异步编程 方法转成用relsove
和reject
触发事件, 用 then
和 catch
捕获成功或者失败的状态执行相应代码的异步编程的方法
//回调写法
function fun1(value,callback) {
value++
setTimeout(function() {
value++
setTimeout(function(){
value++
setTimeout(function(){
console.log(value)
},2000);
},2000);
,2000);
}
fun1() // 4
//Promise写法
function fun1(value) {
retrun new Promise((resolve,reject)=> {
setTimeout(function(callback){
resolve(value++)
},2000);
})
}
fun1(0).then((value)=> {
return new Promise((resolve,reject)=> {
setTimeout(function(callback){
resolve(value++)
},2000);
}).then((value)=> {
return new Promise((resolve,reject)=> {
setTimeout(function(callback){
resolve(value++)
},2000);
}).then(value)=>{
console.log(value)
} // 4
Generator 函数
Generator
函数是将函数分步骤阻塞 ,只有主动调用next()
才能进行下一步。
dva 中异步处理用的是 Generator
async 函数
简单的说async
函数就相当于自执行的Generator
函数,相当于自带一个状态机,在 await
的部分等待返回, 返回后自动执行下一步。而且相较于Promise
,async
的优越性就是把每次异步返回的结果从 then
中拿到最外层的方法中,不需要链式调用,只要用同步的写法就可以了。
比 promise
直观,但是 async
必须以一个 Promise
对象开始 ,所以 async
通常是和Promise
结合使用的。