您的位置:首页 > 其它

Promise

2019-07-26 10:18 295 查看

(九)Promsie  解决异步回调问题

           传统的解决异步的方法:(1)回调函数(2)事件驱动

(1-1)Promise

[code]//语法格式
var promise = new Promise(function(resolve,reject){
resolve('成功');
reject('失败');
})
promise.then(res=>{
console.log(res);   // 成功的返回
}).catch(err=>{
console.log(err);   // 失败的返回
})
[code]// Promise.resolve('aaa');   将现有的东西转换成Promise对象,  resolve成功的状态

var p1 = Promise.resolve('aaa');
p1.then(res=>{
console.log(res);   // 成功的返回
})

//--------等价于-----------
var p1 = new Promise(function(resolve,reject){
resolve('aaa');
})

// Promise.reject('bbb');   将现有的东西转换成Promise对象,  reject失败的状态
var p2 = Promise.reject('bbb');
p2.then(res=>{
console.log(res);   // 成功的返回
}).catch(err=>{
console.log(err);   // 失败的返回
})

(1-2)Promise.all([])    把Promise打包,放进一个数组里面,打包完后还是一个Promise对象。

                                       必须确保,所有的Promise对象都是resolve状态

(1-3)Promsie.race([])   只要有个一成功就返回。

写了一个栗子,可以瞅瞅:

[code]let status = 1;   // 默认状态为1
// 用户登录
let userLogin = (resolve,reject)=>{
setTimeout(()=>{
if(status == 1){
resolve({data:'abcd',msg:'用户登录成功',token:''})
}else{
reject('用户登录失败');
}
},2000)
}
// 获取用户登录信息
let userMsg = (resolve,reject)=>{
setTimeout(()=>{
if(status == 2){
resolve({data:'',msg:'',username:'柠檬',age:'18'})
}else{
reject('获取用户信息失败');
}
},1000)
}

new Promise(userLogin).then(res=>{
console.log('用户登录成功');
return new Promise(userMsg);
}).then(res=>{
console.log('获取用户信息成功');
console.log(res);
}).catch(err=>{
console.log(err);
})

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: