promise: ES6的方法
同步操作的异步代码
1、promise是一个构造函数 所以用的时候必须new
promise里面有一个参数,这个参数是一个回调函数,回调函数里面有2个参数
resolve,reject 当成功的时候执行的东西 ,一个是当失败的时候去执行的东西
resolve:当成功的时候会通知下一个异步的程序去执行
如果没有通知下一个异步代码是不会去执行的
reject:当失败的时候会通知下一个异步程序去执行,
如果没有通知下一个异步程序就不会去执行
then()下一个异步程序这个里面支持2个参数 2个参数都是回调函数
第一个回调函数是成功的回调函数,第二个回调函数是失败的回调函数
支持链式操作
catch():执行失败的回调函数
该写法只适用异步代码同步2次操作,因为 .then只能一次,后面的then无效
var p1=new Promise(function(resolve,reject){
setTimeout(function(){
console.log(1);
执行console.log(1);console.log(2);
resolve();
//执行console.log(1);console.log("我是失败的回调");
// reject();
},3000)
})
p1.then(function(){
setTimeout(function(){
console.log(2);
},1000)
},function(){
setTimeout(function(){
console.log("我是失败的回调");
},1000)
})
}
// p1.then(function(){
setTimeout(function(){
console.log(2)
},1000)
}).catch(function(){
setTimeout(function(){
console.log("我是失败的回调")
},1000)
})
如何实现多个异步同时执行
var p1=new Promise(function(resolve,reject){
setTimeout(function(){
console.log("1");
resolve();
},3000)
})
}
function p2(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log("2");
resolve();
},2000)
})
}
function p3(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log("3");
resolve();
},1000)
})
}
function p2(){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log("4");
// resolve();(可以不写)
},1000)
})
}
p1.then(function(){
return p2();
})
.then(function(){
return p3()
})
.then(function(){
p4()
})
传递参数
var p1=new Promise(function(resolve,reject){
setTimeout(function(){
console.log(1);
var obj={name:"张三"};
执行console.log(1);console.log(2);
resolve(obj);
//执行console.log(1);console.log("我是失败的回调");
// reject(obj);
},3000)
})
p1.then(function(data){
console.log(data);
setTimeout(function(){
console.log(2);
},1000)
},function(data){
console.log(data);
setTimeout(function(){
console.log("我是失败的回调");
},1000)
})
}