1.为什么会出现promise,它解决了什么问题
在开发中会出现一个请求依赖于另一个请求的结果,就会无限循环套娃,俗称回调地狱。promise的出现终结了这个问题。
2. promise是什么
promise是异步编程的一种解决方案。从语法来说,promise是一个对象,用过它可以获得异步操作的状态,分别为pending、reslove、reject, 状态一旦确定就不会更改,创造promise实例后会立即执行。
3.promise能用来做什么
promise常用方法,
all:
# 谁跑的慢,以谁为准执行回调。all接收一个数组参数,里面的值最终都算返回Promise对象
let pro1 = new Promise((resolve, reject) => {
setTimeout(() => {resolve(1)},0)
})
let pro1 = new Promise((resolve, reject) => {
setTimeout(() => {resolve(1)},1000)
})
let pro1 = new Promise((resolve, reject) => {
setTimeout(() => {resolve(1)},2000)
})
let p = Promise.all([pro1,pro2,pro3])
p.then((res) => {
console.log(res)
})
race:
# 有一定竞争,谁跑的快,以谁为准执行回调
//请求某个图片资源
function requestImg(){
let p = new Promise((resolve, reject) => {
let img = new Image();
img.onload = function(){
resolve(img);
}
img.src = '图片的路径';
});
return p;
}
//延时函数,用于给请求计时
function timeout(){
let p = new Promise((resolve, reject) => {
setTimeout(() => {
reject('图片请求超时'); }, 5000)
})
return p;
}
Promise.race([requestImg(), timeout()]).then((data) =>{
console.log(data);
}).catch((err) => {
console.log(err)
})
1.发异步请求
eg: let p = new Promise((reslove,rejecet) => {
// 做异步请求
setTimeout(() => {
reslove(123)
},0)
})
2.发多个并发请求
let Promise1 = new Promise(function(resolve, reject){})
let Promise2 = new Promise(function(resolve, reject){})
let Promise3 = new Promise(function(resolve, reject){})
Promise.all([Promise1,Promise2,Promise3]).then((res) => {
// 三个都成功才会成功
console.log(1)
}).catch((err) => {
// 有一个失败就会报错
console.log(2)
})