Promise:

解决异步回调问题

传统方式使用的话:大部分用回调函数,事件


  • 使用时可以:
<script >let a = 10;// 返回Promise对象let Promis = new Promise(function (resolve, reject) {//resolve 成功的时候调用// reject 失败的时候调用if (a == 10) {resolve('成功');} else {reject('失败');}});
</script>
  • 其中上面的Promis可以接受resolve / reject来进行下一步操作
<script >
//    Promis.then(res=>{//
//    },err=>{//
//    })// 如:Promis.then(res=>{console.log(res);},err=>{console.log(err);})
</script>
  • 使用catch来接收报错:
<script >let a = 10;// 返回Promise对象let Promis = new Promise(function (resolve, reject) {//resolve 成功的时候调用// reject 失败的时候调用if (a == 10) {resolve('成功');} else {reject('失败');}});// reject,发生错误的别名Promis.catch(err => {console.log(err);})
</script>
  • 处理Promise的resolve / reject时,也可以使用 . 连接:
<script >let a = 10;// 返回Promise对象let Promis = new Promise(function (resolve, reject) {//resolve 成功的时候调用// reject 失败的时候调用if (a == 10) {resolve('成功');} else {reject('失败');}});//此处可以直接使用 .连接Promis.then(res => {console.log(res);}).catch(err => {console.log(err);})
</script>

也可以使用then() 来接收resolve / reject 的结果

<script >new Promise().then(res=>{},err=>{})
</script>
  • 将现有东西转成一个promise对象
<script >let a = 10;// 返回Promise对象let Promis = new Promise(function (resolve, reject) {//resolve 成功的时候调用// reject 失败的时候调用if (a == 10) {resolve('成功');} else {reject('失败');}});Promise.resolve('aa'): // 将现有东西转成一个promise对象,resolve状态,成功状态// 等价于:new Promise(resolve => {resolve('aaa')});// 或者:Promise.reject('aaa'): // 将现有东西转成一个promise对象,reject状态,失败状态// 等价于:new Promise(reject => {reject('aaa')});
</script>
  • promise可以传递状态 resolve / reject:
<script >p1 = new Promise(resolve => {resolve('aaa')});p1.then(res => {console.log(res);})
</script>
  • Promise.all():

把promise打包,打包完还是一个promise对象

若是其中传入的一个promise对象的状态与其他promise状态不符,会导致报错(必须确保里面所有promise对象都是resolve状态才靠谱)

如:

<script >let p1 = Promise.resolve('aaa');let p2 = Promise.resolve('bbb');let p3 = Promise.resolve('ccc');Promise.all([p1, p2, p3]).then(res => {// console.log(res);let [res1, res2, res3] = res;console.log(res1, res2, res3);})
</script>
  • Promise.race():

只要用一个成功就返回,如:

<script >let p1 = Promise.resolve('aaa');let p2 = Promise.reject('bbb');let p3 = Promise.resolve('ccc');Promise.race([p1, p2, p3]).then(res => {console.log(res);}).catch(err => {console.log(err);})
</script>
  • demo_练习:
<script >// 用户登录成功 / 失败 练习let status = 1;let userLogin = (resolve, reject) => {setTimeout(() => {if (status == 1) {resolve({data: '登陆成功', msg: 'asfasfas', token: 'asfyuiofdgb'});} else {reject('失败了');}}, 2000)};let getUserInfo = (resolve, reject) => {setTimeout(() => {if (status == 1) {resolve({data: '获取用户成功', msg: 'asfasfas', token: 'asfyuiofdgb'});} else {reject('失败了');}}, 1000)};new Promise(userLogin).then(res => {console.log('用户登录成功');return new Promise(getUserInfo);}).then(res => {console.log('获取用户信息成功');console.log(res);})
</script>

ES6_Promise相关推荐

最新文章

  1. 用Java实现单向链表
  2. 为什么要重写hashcode( )和equals( )?
  3. python都可以干什么-python都能干嘛
  4. 运动检测(前景检测)之(二)混合高斯模型GMM
  5. Solr Admin中带高亮查询,带score查询;edismax的mm查询
  6. 大剑无锋之二分搜索、二分搜索时间复杂度、三分查找呢?
  7. Educational Codeforces Round 37-F.SUM and REPLACE (线段树,线性筛,收敛函数)
  8. 判断鼠标是否在元素上_能不能从大便上判断出一个人是否患有结肠癌?
  9. java状态模式和策略模式_Java状态和策略设计模式之间的差异
  10. Dottext.Web.UI.Handlers.BlogExistingPageHandler
  11. phabricator mysql_Phabricator服务的搭建
  12. matlab铣削表面形貌仿真,进给方向振动辅助铣削三维表面形貌仿真分析
  13. 十个提升你Emacs生产力的高招
  14. 屏幕录像专家----百度百科
  15. 360一键root su浅析
  16. 从头学android_activity之间的切换_姻缘测算器
  17. iOS 初中级工程师简历指北
  18. 高斯勒让德求积公式matlab通用程序,数值分析——Gauss-Legendre 求积分(Matlab实现)...
  19. 文本对比。文本编辑距离算法
  20. android ubuntu网络,Android手机利用USB共享网络通过Ubuntu连接网络

热门文章

  1. 谈一谈为什么我要创建个人博客
  2. 开始使用 Markdown
  3. android对应版本号
  4. Win7下安装git
  5. 自定义 Spark item 的渲染器
  6. 各大网站猪年新春应景LOGO秀
  7. win10录屏工具_win10录屏软件选哪款?没用过别后悔
  8. 资源放送丨《Oracle DataGuard 备份恢复最佳实践 》PPT视频
  9. 智能时代,企业如何“聚数为智”加速数字化转型?
  10. 史上最通俗分布式锁解读