1、Promise是什么?
promsie是ES6新增的一个特性,它已经列入ES6的正式规范中
promise是抽象处理对象以及对其进行各种操作的组件,是一种异步流程的控制手段。
javaScript和Node都是单线程非阻塞的,所以就会有异步回调的问题,promise就是为了解决这类问题的。
Promise可以支持多个并发的请求,获取并发请求中的数据。
Promise可以使用链式调用的方法来组织代码,所以使用Promise对象后,就可以将异步操作
1.代码示例: 默认promise中的executor默认执行
let p=new Promise((resolve,reject)=>{
console.log(1);
});
console.log(2);//默认执行
2.代码示例: 调用onFuifilled
let p=new Promise((resolve,reject)=>{
resolve('成功');
});
p.then((value)=>{//value成功的原因
console.log(value);
},(err)=>{//err失败的原因
console.log(err);//成功
})
3、代码示例: 调用onRejected
let p=new Promise((resolve,reject)=>{
reject('失败');
});
p.then((value)=>{//value成功的原因
console.log(value);
},(err)=>{//err失败的原因
console.log(err);//失败
})
4、代码示例: 成功了就不能失败,相反也一样
let p=new Promise((resolve,reject)=>{//
resolve('成功');
reject('失败');
});
p.then((value)=>{//value成功的原因
console.log(value);
},(err)=>{//err失败的原因
console.log(err);//成功
})
5、链式操作
Promise1().then((value)=>{
console.log(valuse);
return Promise2();
}).then((value)=>{
console.log(value);
return Promise3();
}).then((value)=>{
console.log(value);
})//可以then到天荒地老
function Promise1(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//异步操作
console.log('异步1');
resolve('异步1传的值');
},1000);
})
}
function Promise2(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//异步操作
console.log('异步2');
resolve('异步2传的值');
},3000);
})
}
function Promise3(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//异步操作
console.log('异步3');
resolve('异步3传的值');
},2000);
})
}
//输出的值为: 异步1 异步1传的值 异步2 异步2传的值 异步3 异步3传的值
6、promise.all方法 同时执行多个Promise方法,当这个数组里所有的promise对象都变为resolve时,该方法才会返回
let p1=new Promise((resolve,reject)=>{
setTimeout(function(){
resolve('Promise1');
},1000);
})
let p2=new Promise((resolve,reject)=>{
setTimeout(function(){
resolve('Promise2');
},3000);
})
Promise.all([p1,p2]).then((result)=>{
console.log(result);
})
7、promise.race也是传入一个数组,但是与promise.all不同的是,promise.race只返回跑的快的值
let p1=new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(1);
resolve('Promise');
},3000);
})
let p2=new Promise((resolve,reject)=>{
console.log(2);
resolve('Promise2');
},1000)
Promise.race([p1,p2]).then((result)=>{
console.log(result);
})
网友评论