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();
这样可以解决两层以上嵌套;
非常方便,有什么意见请留言!