初探 es6 promise

javascript是单线程程序,所有代码都是单线程执行。导致javascript的网络请求都是异步执行,异步执行可以通过回调函数实现:
setTimeout(callback,1000);
function callback(){
    console.log('----callback')     
    //1秒钟才能打印,回调函数处理异步执行的
};
但是es6推出一种新的方法new Promise()==>对象用于表示一个异步操作的最终状态(完成或失败),以及其返回的值。
new Promise( function(resolve, reject) {...});resolve 表示成功的状态 reject 表示失败的状态
Promise的方法有:
1.Promise.all([]).then(e=>e).catch(e=>e) ==>数组中所有传入状态完成才执行
2.Promise.race([]).then(e=>e).catch(e=>e) ==>数组中又一个传入的状态完成就执行
3.Promise.resolve({}) ==>返回一个成功的状态
4.Promise.reject({}) ==>返回一个失败的状态
let a=new Promise((resolve,reject)=>{
    resolve(1)
    //或reject()
});
a.then(e=>{   // resolve 返回的结果
    console.log(e)  //1
}).catch(e=>{ //reject 返回的结果
    console.log(e)
});
如果我们有一个需求是需要所有3个接口的数据都返回了然后再进行操作,那么promise.all就可以解决,比如下面例子:
let b1=new Promise((resolve,reject)=>{
    resolve('b1')
});
let b2=new Promise((resolve,reject)=>{
    resolve('b2')
})
let b3=new Promise((resolve,reject)=>{
    resolve('b3')
});
let b4=Promise.resolve('成功')  //调用一个成功的状态
Promise.all([b1,b2,b3,b4]).then(value=>{
    console.log(value)   //  'b1', 'b2', 'b3' ]
})
let b5=Promise.reject('失败')  //调用一个失败的状态
Promise.all([b1,b5]).then(value=>{
    console.log(value)   
}).catch(e=>{
    console.log(e,'------失败')  //失败
})
如果我们有一个需求是3个接口中只要有一个完成了接口请求即执行,Promise.race([])
var promise1 = new Promise(function(resolve, reject) {
    setTimeout(resolve, 50, 'one');
});
var promise2 = new Promise(function(resolve, reject) {
    setTimeout(resolve, 100, 'two');
});
Promise.race([promise1, promise2]).then(value=>{    
  console.log(value);  //one  
}).catch(e=>{
    console.log(e)
})
//promise1或者promise2谁先执行完就执行就获取先执行的值

每天进步一点,希望大家喜欢,也希望喜欢的朋友点个赞或收藏,后续继续更新...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值