ES6_Promise承诺解决异步

<!DOCTYPE html>
<html>
<head>
<title>Promise承诺解决异步</title>
<script type="text/javascript">
/*
//Promise承诺解决异步
//传统方式: 大部分用回调函数,事件
ajax(url,()=>{
//获取token
ajax(url,()=>{
//获取用户信息
ajax(url,()=>{
//得到浏览内容权限

})
})
})

*/

let a = 1;
let promise = new Promise(function(resole,reject){
if (a==10) {
resole('成功的提示信息');
}else{
reject('错误的提示信息');
}
});
// promise.then(res=>{
// console.log(res);
// },err=>{
// console.log(err);
// })
// promise.catch(err=>{
// console.log(err);
// })

//优化写法 去掉第二个参数,直接catch
promise.then(res=>{
console.log(res);
}).catch(err=>{ //catch好像要慢许多,因为下面的resolve都执行完了,才执行到这里
console.log("catch的err"+err);
})

/*
=====================================================================================
*/
/*
let p1 = Promise.resolve('aaa');//将现有的东西,转成一个Promise对象,resolve状态,成功状态等价于下面
p1.then(res=>{
console.log('p1的resolve'+res);
})

//上面和下面的写法类似
let p2 = new Promise(resolve=>{
resolve('aaa');
});
p2.then(res=>{
console.log('p2的resolve'+res);
});


let p1 = Promise.reject('aaa');
let p2 = new Promise(resolve=>{
reject('aaa');
});
p2.then(res=>{
console.log('p2的resolve'+res);
});
//-------------------------------------------------------------------------
//批量处理Promise对象
let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb');
let p3 = Promise.resolve('ccc');

Promise.all([p1,p2,p3]).then(res=>{ //把promise打包,扔到一个数组里,打包完还是一个promise对象
let [res1,res2,res3] = res; //必须确保,所有的promise对象,都是resolve状态,都是成功状态
console.log(res1,res2,res3);
})

Promise.race([p1,p2,p3]).then(res=>{ //只要一个成功,就返回
let [res1,res2,res3] = res;
console.log(res1,res2,res3);
})
*/
//例子 模拟登陆
let status=1;
let userLogin = (resolve,reject)=>{
setTimeout(()=>{
if (status==1) {
resolve({data:'某某人',msg:'这是一些提示信息',token:'xsadsadasfassa'});
}else{
reject('登陆失败鸟');
}
},1000);
};
let gerUserInfo = (resolve,reject)=>{
setTimeout(()=>{
if (status==1) {
resolve({data:'获取用户信息成功',msg:'撒旦',token:'xsadsadasfassa'});
}else{
reject('获取用户数据失败');
}
},1000);
};
new Promise(userLogin).then(res=>{
console.log(res.data+'登陆成功');
return new Promise(gerUserInfo);//返回第二个方法,让下个then调用
}).then(res=>{
console.log(res);
})


//-------------------------------------------------------------------------
//......//已经学会了 2018年8月2日19:45:03 笔记已补充完整//
//-------------------------------------------------------------------------

//暂时未学明白,暂时中止
//大概知道这个的意思就是,网络请求时会存在异步请求,可以把请求顺序进行排序,能方便请求的顺序
//解决的是异步请求的多层嵌套关系 如下:
// ajax(url,()=>{
// //获取token
// ajax(url,()=>{
// //获取用户信息
// ajax(url,()=>{
// //得到浏览内容权限
// ajax(url,()=>{
// //一些其他的异步操作
// //...
// })
// })
// })
// })
//2018年7月30日17:43:05
//

</script>
</head>
<body>

</body>
</html>

posted @ 2018-08-22 15:55  大火yzs  阅读(361)  评论(0编辑  收藏  举报