1.基本用法
let p =new Promise(function (resolve, reject) {
// resolve("成功回调");
reject("失败回调")
});
p.then((data)=>{
console.log("成功:"+data);
},(err)=>{
console.log("失败:"+err); // 失败:失败回调
});
2.then中返回Promise对象
如果then中返回了一个promise 会将promise的结果继续传给第二then中(如果结果是将状态改成成功就走下一个then的成功回调,状态改为失败就走下一个then的失败回调)
function write(number){
return new Promise(function(resolve,reject){
if(number>=60){
resolve("成绩及格")
}else{
reject("成绩不及格")
}
})
}
let p = write(70);
p.then(data=>{
console.log(data); // 成绩及格
return write(50);
},err=>{
console.log(err);
}).then(data=>{
console.log(data);
},err=>{
console.log(err); // 成绩不及格
})
3.then中返回普通值
第一个then不管是走成功还是失败的回到函数,只要返回一个普通值(不抛出错误或者返回promise), 都会执行下一个then的成功的回调。
let p1 = new Promise(function (resolve, reject) {
resolve("成功p1");
});
/* 返回一个字符串,执行下一个then成功的回调 */
p1.then((data) => {
console.log(data); // 成功p1
return "普通值"
}, (err) => {
console.log(err);
}).then((data) => {
console.log(data); // 普通值
}, (err) => {
console.log(err);
});
let p2 = new Promise(function (resolve, reject) {
resolve("成功");
});
/* 在then成功回调中抛出错误,使其执行下一个then的失败回调 */
p2.then((data) => {
console.log(data); //成功
throw "抛出错误字符串"
}, (err) => {
console.log(err);
}).then((data) => {
console.log(data);
}, (err) => {
console.log(err); // 抛出错误字符串
});
4.catch
当then中没有设置失败回调,就会找到catch
let p = new Promise(function(resolve,reject){
reject("失败")
});
p.then(data=>{
console.log(data);
}).catch(err=>{
console.log("catch"+err); // catch失败
})
5.all
Promise.all方法执行后返回的依旧是promise, all两个全成功才表示成功
function test(score){
return new Promise(function(resolve,reject){
if(score>=60){
resolve(score);
}else{
reject(score);
}
});
}
let p = Promise.all([test(70),test(80)]);
p.then(data=>{
console.log(data) // [70,80] 数组
console.log("成绩及格") // 成绩及格
}).catch(err=>{
console.log(err); // Number类型
console.log("成绩不及格")
})
6.Promise静态方法
Promise.resolve([1,2,3]).then(function(data){
console.log(data); //[1,2,3]
});
Promise.reject([1,2,3]).then(null,function(err){
console.log('err',err) //err [ 1, 2, 3 ]
});