比较常用的场景是同时调用多个接口,要求完成第一个接口执行完后再调用第二个接口。
new Promise((resolve, reject) =>{
setTimeout(()=>{
console.log('000');
resolve('000') //这里是第一个业务逻辑处理完后调用resolve()进行下一个then方法
},2000)
}).then(res =>{
return new Promise((resolve,reject) =>{ //第一种resolve和reject写法
setTimeout(() =>{
console.log(res + '111');
resolve(res + '111'); //这里是第二个业务逻辑处理完后调用resolve()进行下一个then方法
},3000)
})
}).then(res =>{
console.log(res + '222');
//这里是第三个业务逻辑处理完后调用reject()进行catch错误方法
return Promise.reject('err msg') //第二种reject写法
//这里是第三个业务逻辑处理完后调用resolve()进行下一个then方法
// return Promise.resolve(res + '2222') //第二种resolve写法
}).then(res =>{ //then是调用resolve()后触发的函数
console.log(res + '333');
}).catch(err =>{ //catch是调用reject()后触发的函数
console.log(err);
})
如果要多个异步方法处理完后再执行下一步,可使用,Promist.all()。
Promise.all([
new Promise((resolve, reject) =>{ //第一个异步
setTimeout(()=>{
console.log('1111');
resolve({name: 'why', age: 18})
},3000)
}),
new Promise((resolve, reject) =>{ //第二个异步
setTimeout(()=>{
console.log('2222');
resolve({name: 'why2', age: 19})
},2000)
})
]).then(results =>{
console.log(results); //两个异步处理完才执行
})
也可以写成下面的方式:
Promise.all([
this.test1(),
this.test2(),
this.test3(),
]).then((result) => {
//这里就是所有异步执行完后会执行的地方
console.log('成功返回执行', result);
}).catch(err=>{
console.log('异常返回执行', err);
});
test1(){
return new Promise((resolve, reject) => {
setTimeout(()=>{
console.log('第一个');
resolve('test1');
}, 3000)
});
},
test2(){
return new Promise((resolve, reject) => {
setTimeout(()=>{
console.log('第二个');
resolve('test2');
// reject('err') //reject执行catch方法
//这里因为
}, 2000)
});
},
test3(){
return new Promise((resolve, reject) => {
setTimeout(()=>{
console.log('第三个');
resolve('test3');
}, 1000)
});
},