![4d317a369e3485406be86f8b3edea1d5.png](https://i-blog.csdnimg.cn/blog_migrate/09fb2406fe82304ceb1574e01d5e6f8c.jpeg)
背景:
promise是一个异步解决方案,主要是解决了回调地域的问题
API:
- promise.then
- promise.all
- promise.race
promise.then的用法:
var p = new Promise(function(resolve,reject){
console.log('start some logic');
resolve("success");
reject(''fail")
})
p.then(function(data){
//处理resolve的代码
console.log(data) // success
},function(data){
//处理reject的代码
console.log(data)// fail
})
promise.all 的用法
promise.all(iterable) 参数是一个可以迭代的数组
迭代这个数组,如果数组中的每一项都是resolve 如果有一项被拒绝会返回拒绝的值
var p1 = new Promise(function(resolve,reject){
resolve(1)
})
var p2 = new Promise(function(resolve,reject){
resolve(2)
})
promise.all([p1,p2]).then(function(data){
console.log(data) // 1,2
})
拒绝的情况下会返回的值:
var p1 = new Promise(function(resolve,reject){ resolve(1) })
var p2 = new Promise(function(resolve,reject){ reject(2) })
promise.all([p1,p2]).then(function(data){
console.log(data)
}).catch(function(err){
console.log(err)//2
})
使用场景:可以合并请求 验证请求的结果是否都有返回值;
promise.race 的用法
promise.race() 入参是一个可迭代的数组
返回值:返回值是一个promise对象,其值是根据迭代的数组中第一个完成的值来确定的,如果是resolve则返回解决,如果是reject 则返回失败
使用场景;有些时候,我们前一秒刷着新闻,下一秒进入电梯后,手机页面上就会提示你 “网络不佳”
let p1 = new Promise(function(resolve,reject){
setTimeout(function(resolve){
resolve('请求成功')
},4000)
})
let p2 = new Promise(function(resolve,reject){
setTimeout(function(){
reject('请求超时')
},3000)
});
promise.race([p1,p2]).then(function(res){
console.log(res)
}).catch(function(err){
console.log(err) // 请求超时
})
[1][2]
参考
- ^此文章非原创,仅加深自己的记忆,若有侵权请私信
- ^https://juejin.im/post/5e9c03bcf265da47e22f2d01#heading-4