什么情况下会用到promise
一般情况下有异步操作时,使用Promise对这个异步操作进行封装
new Promise((resolve,reject) => {
<!--第一次请求网络代码-->
setTimeout(() => {
<!--成功调用-->
resolve('hello')
<!--失败调用-->
reject('err')
},1000)
}).then(data => {
<!--第一次拿到结果的处理代码-->
console.log(111 + data)
<!--手动抛出异常-->
<!--throw 'error message'-->
return new Promise((resolve,reject) => {
<!--第二次请求网络代码-->
setTimeout(() => {
<!--成功调用-->
resolve('hello')
<!--失败调用-->
reject('err')
},1000)
})
}).then(data => {
<!--第二次拿到结果的处理代码-->
console.log(222 + data)
return new Promise((resolve,reject) => {
<!--第三次请求网络代码-->
setTimeout(() => {
resolve('hello')
reject('err')
},1000)
})
}).then(data => {
<!--第三次拿到结果的处理代码-->
console.log(333 + data)
},err => {
<!--错误处理-->
console.log(err)
})
链式调用简写
new Promise((resolve,reject) => {
setTimeout(() => {
resolve('hello world')
},1000)
}).then(data => {
console.log(data)
return data + '111'
}).then(data => {
console.log(data)
return data + '222'
}).then(data => {
console.log(data)
return Promise.reject(data + 'error')
}).then(data => {
console.log(data)
return data + '444'
}).then(data => {
console.log(data)
})
Promise All 用法
函数需满足多个异步请求才会执行,此时就可以用到All方法
Promise.all([
new Promise((resolve,reject) => {
setTimeout(() => {
resolve('result1')
},2000)
}),
new Promise((resolve,reject) => {
setTimeout(() => {
resolve('result2')
},1000)
}),
]).then(results => {
console.log(results)
})