Promise对象是解决异步回调嵌套的一种方案,现在封装Promise的库很多、像q,bluebrid等等。Promise对象下调用.then方法就可以把异步排个顺序,那么只要返回Promise对象、.then就可以继续下去
首先我们定义三个异步方法
-
var test ={
-
func1:function(){
-
var data = new Promise(function(resolve){
-
setTimeout(function(){
-
resolve("ajax结果111")
-
},200)
-
})
-
return data;
-
},
-
func2:function(){
-
var data = new Promise(function(resolve){
-
setTimeout(function(){
-
resolve("ajax结果222")
-
},100)
-
})
-
return data;
-
},
-
func3:function(){
-
var data = new Promise(function(resolve){
-
setTimeout(function(){
-
resolve("ajax结果333")
-
},500)
-
})
-
return data;
-
}
-
}
假设三个方法分别三个ajax
然后
-
test.func1().then(function(value){
-
console.log(value)
-
//do something...
-
})
那如果想要三个ajax顺序请求、并依赖上一个ajax的结果,该怎么写呢?
可能你会这样做:
-
test.func1().then(function(value){
-
console.log(value)
-
test.func2().then(function(value){
-
console.log(value)
-
test.func3().then(function(value){
-
console.log(value)
-
//do something...
-
})
-
})
-
})
-
但是这样写跟ajax嵌套一样代码越多越看不清楚...改起来也麻烦
所以要链式调用、并让三个方法顺序执行
-
test.func1().then(function(value){
-
console.log(value)
-
//do something...
-
return test.func2();
-
}).then(function(value){
-
console.log(value)
-
return test.func3();
-
}).then(function(value){
-
console.log(value)
-
})
使用return链式调用、这样代码就清晰明了
希望可以帮助到大家
|