promise有什么用?
js代码执行都是单线程的,而在开发过程中需要书写异步代码比如:ajax调用、事件回调等。如果一直使用回调函数书写代码的话会带来回调地狱问题。让我们业务高度耦合,不利于复用和阅读。
promise的出现,就是解决了这个问题。将执行结果代码、和结果处理代码分离,通过链式调用,让代码复用性,和可读性得到了极大的提升。
-
promise 一共有三个状态
1. pending - 进行中
2. fulfilled - 成功
3. rejected - 失败 -
promise 的then catch方法
then 接受的是resolve返回的参数, catch接受的是reject返回的参数。也可以幻城 p.then(f1,f2)写法,f1 表示reslove的值,f2表示reject的返回值。 -
大promise 的方法
静态方法 race 、all
race 只要第一个promise返回了状态,无论成功与失败,其他的promise,都不执行了。
all 只要有一个promise 执行失败,那么,就只返回执行错的那个,否则返回执行正确的数组形式结果集
let p1 = new Promise(function(reslove,reject){
setTimeout(() => {
reslove('p1')
}, 1000);
})
let p2 = new Promise(function(reslove,reject){
setTimeout(() => {
reslove('p2')
}, 2000);
})
Promise.race([p1,p2]).then(function(res){
console.log(res)
})//p1
let p1 = new Promise(function(reslove,reject){
setTimeout(() => {
reslove('p1')
}, 1000);
})
let p2 = new Promise(function(reslove,reject){
setTimeout(() => {
reslove('p2')
}, 2000);
})
let p3 = new Promise(function(reslove,reject){
setTimeout(() => {
reject('p3')
}, 3000);
})
Promise.all([p1,p2,p3]).then(function(res){
console.log(res)
}).catch(err=>console.log(err)) //p3
- **Promise的链式调用
let p = new Promise(function(reslove,reject){
setTimeout(() => {
reslove('p')
}, 1000);
})
p.then(res=>{
console.log(res)
return 'p1'
})
.then(res=>{
console.log(res)
return 'p2'
})
.then(res=>{
console.log(res)
})
// p p1 p2
console.throw
throw 会直接报错,后边的代码不执行。
console.error 报错后继续执行
console.warn 报警
网友评论