ES6中的Promise作用:解决异步嵌套问题。
但是只能解决两层嵌套,不能解决两层以上嵌套;
解决方法是我自己封装的函数如下:
function Promising(){
var _arr=[];
this.then=function(fx){
//将回调函数存到数组中,等队列算法去顺序调用
_arr.push(fx);
return this;//返回自身的this,可以重复调用then()方法
}
this.resolve=function(value){//可以传个参数
//作用:按照先进先出的顺序调用数组中的函数
if(_arr.length>0){
_arr.shift()(value);//执行队列中的第一个函数
}
}
}
var _promise=new Promising();//new一个对象
_promise.then(function(){
window.setTimeout(function(){//这里的延时器也是异步
alert("3s");//先弹出3s;
_promise.resolve();//每次执行完我们想执行的代码,就要调用resolve()方法,保证能执行下一个函数
},3000);
}).then(function(){
window.setTimeout(function(){
alert("2s");//再弹出2s;
_promise.resolve();
},2000);
}).then(function(){
window.setTimeout(function(){
alert("1s");//再弹出1;
_promise.resolve("tip");
},1000);
}).then(function(value){
alert(value);
}).resolve();
这样可以解决两层以上嵌套;
非常方便,有什么意见请留言!