分享一下自己解决异步的轮子shy-Do
github地址在这 重写一个单页应用的时候,看到各种嵌套之后决定把它们抹平,就写了这个轮子 一开始只有三个api
Do
.done(fucntion(val){
//do something
return val
})
.wait(function(val,rl){
//do something
rl(val)
})
.catch(function(err){
console.log(err)
throw err
})
.done().....
后面又需要一个插件的值才能进行下一步
.wait(function(val,rl){
require.async(plugIn,rl)
})
觉得这样写有点麻烦就又加了个APIresult
和wait
搭配使用:
var plugIn = Do.wait(function(val,rl){
require.async(plugIn,rl)
});
________________
.wait( plugIn.result )
.done(function(res){
//do something with res
})
后面又需要等待jQuery的插件加载完成后才能进行下一步
.wait(function(val,rl){
require.async(plugIn2,function(){
rl(val)
})
})
这样也是挺麻烦的,就又加了个APIdepend
:
var plugIn2 = Do.wait(function(val,rl){
require.async(plugIn2,rl)
});
________________
.depend( plugIn2 )
.done(function(val){
//do something with val
return val
})
其实这个改改也是可以当做Promise兼容库的,但是为了书写更方便选择了不和Promise兼容,所以Promise中的all
之类的静态方法没有去实现.
var Promise =function(func){
return Do.wait(function(val,rl,rj){
func(rl,rj)
})
}
var p1 = new Promise(function(rl,rj){
setTimeout(function(){
rl(1)
},2000)
})
var p2 = p1
.then(function(val){
console.log(val)
return ++val
})
.then(function(val){
console.log(val)
})
并且这个的速度比native-promise-only
的速度快很多,和原生的Promise不相上下,但是当.then的链式调用的数目超过最大回调嵌套数就出错了,而native-promise-only
不会,分享出来就是想解决这个问题的