1. 为什么要使用类Promise?
有时候我们需要对网络请求返回的数据进行处理,对处理好后的数据再次发送网络请求,再处理,再请求,不断循环。这是就会形成回调地狱,这使得后期对代码的维护以及对代码逻辑的判断变得极为困难。为了解决这一问题,Promise应运而生。2. Promise 的基本使用
new Promise((resolve,reject)=>{
setTimeout((data)=>{ //此处用setTimeout来模拟网络请求
resolve(data)
reject(err)
},2000)
}).then((data)=>{
console.log(data)
}).catch((err)=>{
console.log(err)
})
new Promise((resolve,reject)=>{
setTimeout((data)=>{ //此处用setTimeout来模拟网络请求
resolve(data)
reject(err)
},2000)
}).then((data)=>{
console.log(data)
},(err)=>{
console.log(err)
})
3. Promise 的链式调用
new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve()
},2000)
}).then(()=>{
console.log("hello world");
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve()
},2000)
}).then(()=>{
console.log("hello python");
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve()
},1000)
}).then(()=>{
console.log("hello vuejs");
})
})
})
改进写法1: new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("aaa")
},2000)
}).then((res)=> {
console.log(res, '第一次处理结果');
return Promise.resolve(res + '111')
}).then((res)=>{
console.log(res,"第二次处理结果");
return Promise.resolve(res+'222')
}).then((res)=>{
console.log(res);
})
改进写法2: new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("aaa")
},2000)
}).then((res)=> {
console.log(res, '第一次处理结果');
return res + '111'
}).then((res)=>{
console.log(res,"第二次处理结果");
return res+'222'
}).then((res)=>{
console.log(res);
})
4. Promise.all 的使用
使用场景:当我们处理一个任务同时需要两个或者多个请求全部完成,这种情况下可以使用Promise.allPromise.all([
new Promise(),
new Promise(),
]).then((result)=>{})
Promise.all([
new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve({name:'chenchen',age:18})
},1000)
}),
new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve({name:'juzi',age:18})
},2000)
})
]).then((result)=>{
console.log(result);
})
Promise.all([])