当了这么久码农到今天没事才开始去深究 Promise 这个对象

  • 什么是 Promise, Promise 有什么用?

  在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱,Promise 这个东西就是为了解决回调嵌套而生的 Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。

  • 知道 promise  ,那应该怎样用呢?

  举个最简单的例子利用 JQuery 返回一个 Promise 对象,实现 .then 对 ajax 进行调用

1   function getData(path,type='get',dataType='json'){
2       return  $.ajax({
3             url:path,
4             type:type,
5             dataType:dataType
6         })
7     }

 

   那如果我用不了 JQuery 怎么办, 我们可以直接用原生 Promise 来实现

 1 function getData(url) {
 2     return new Promise(function (resolve, reject) {
 3         var XHR =new XMLHttpRequest() ;
 5         XHR.onreadystatechange = function () { 7             if (XHR.readyState == 4) {
 8                 if ((XHR.status >= 200 && XHR.status < 300) || XHR.status == 304) {
 9                     try {11                         var response = JSON.parse(XHR.responseText);
12                         resolve(response);
13                     } catch (e) {
14                         reject(e);
15                     }
16                 } else {
17                     reject(new Error("Request was unsuccessful: " + XHR.statusText));
18                 }
19             }
20         }
21         XHR.open('GET', url , true);
22         XHR.send(null);
23     })
24   }

  • 最后我们来说一下 Promise 正常场景的两种使用方法

    1. 回调后调用函数,第一个函数报错后面的函数就可以不用执行。

 1       getData('./data.json',).then((data)=>{
 2           console.log(data)
 3           getData('./data1.json',)
 4         }).then(data=>{
 5           console.log(data)
 6           getData('./data2.json',)
 7         }).then(data=>{
 8           console.log(data)
 9         }).catch(err=>{
10           console.log(err)
11         })

    

    2. 回调后调用函数,第一个函数错误后后面的函数还要继续执行。

 1          getData('./data.json',).then((data)=>{
 2           console.log(data)
 3           getData('./data1.json',)
 4         }).catch(err=>{
 5           console.log(err)
 7           getData('./data1.json',)
 8         }).then(data=>{
 9           console.log(data)
10           getData('./data2.json',)
11         }).then(data=>{
12           console.log(data)
13         })    

  总的来说 Promise 有什么用呢?代码量没减少,写起来还复杂。 你可以这样认为 Promise  没啥用就是让你的代码看起来不那么别扭,没有了回调地狱让你的代码可读写更强,看起来心情更好,心情好代码就打的快,代码打的快就有时间去学习,有时间学习就可以跳槽,就加工资。简单说 Promise 就是一个花瓶。中看!!

转载于:https://www.cnblogs.com/ZhugeXican/p/11286100.html

Promise 学习心得相关推荐

  1. 数据科学学习心得_学习数据科学时如何保持动力

    数据科学学习心得 When trying to learn anything all by yourself, it is easy to lose motivation and get thrown ...

  2. 2017年11月学习心得报告

    学习心得报告 2017.11.30 以下分为五个部分: 一. 关于git的学习 二. 关于fis3的学习 三. 关于es6的学习 四.关于Jquery的学习 五.关于sublime Text3的熟悉 ...

  3. Java EE学习心得

    –Java EE学习心得   1.    称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...

  4. Assembly学习心得

    http://blog.csdn.net/etmonitor/ Assembly学习心得 说明: 最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍,所以我准备记下我的学习心得,已备参 ...

  5. 对于mysql存储过程感想_存储过程学习心得

    存储过程学习心得 (2014-12-28 17:28:06) 标签: it 我使用过几次SQL Server,但所有与数据库的交互都是通过应用程序的编码来实现的.我不知到在哪里使用存储过程,也不了解实 ...

  6. 好程序员Web前端教程分享Vue学习心得

    为什么80%的码农都做不了架构师?>>>    好程序员Web前端教程分享Vue学习心得,Vue是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向 ...

  7. 大学计算机课英语心得体会,关于计算机网络辅助大学英语教学的思考学习心得...

    关于计算机网络辅助大学英语教学的思考学习心得 [摘要]计算机网络辅助教学可以增强学生的学习兴趣,提高他们自觉学习的能力,因而得到了大多数学生的认可,取得了比较显著的成效.计算机网络辅助教学也对大学英语 ...

  8. 我的MYSQL学习心得(十六) 优化

    原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...

  9. Spring Framework------version4.3.5-----Reference学习心得-----总结

    1.Spring Framework概述: 有很多可用版本,网址http://projects.spring.io/spring-framework/       2.Spring Framework ...

最新文章

  1. SqlServer索引的原理与应用
  2. 计算机最小二乘法拟合,数值计算_第6章 曲线拟合的最小二乘法.doc
  3. EasyExcel实现写操作
  4. 【Python】判断字符串中是否含有某个子串
  5. 数据库设计规范 zhuan
  6. 前端如何实现网络速度测试功能_如何通过fiddler的断点功能,来实现不同场景的测试...
  7. practice:如何使用2008R2上的AD管理中心
  8. 《C++ 进阶心法》书籍修正记录
  9. SQL Sever — 导入数据与导出数据到表的方法
  10. 百度浏览器启动公司级内测 截图首度曝光
  11. 利用C#实现Pdf转图片
  12. 我的八年硕博士生涯——CMU王赟写在入职Facebook之前
  13. 渐变按钮 css,CSS3 Gradient Buttons
  14. vmwareshanch删除快照以及删除快照时卡住的解决办法
  15. [2001-2003美/新等合拍经典奇幻大片][魔戒1-3][BD-RMVB][中英字幕/1280x720高清晰版]
  16. 诊断和响应故障_恢复表和表分区
  17. 【矩阵论】线性空间与线性变换(6)
  18. JVM内存结构和垃圾回收算法
  19. WT588D使用记录
  20. C++ 静态成员变量与静态成员函数

热门文章

  1. 【技术解决方案】音视频同步策略分析并计算出当前音频播放的pts
  2. 【WebRTC---入门篇】(八)WebRTC核心之RTP Medio 媒体控制与数据统计
  3. C 运算符和语句总结
  4. python gitlab_Python Gitlab Api 使用方法
  5. java map 如何根据key获得对象_ThreadLocal:Java中的影分身
  6. linux mint 18支持安卓编译,Linux mint 18版本开启SSH服务
  7. oracle42997,oracle与db2的比较
  8. pythonqt4上位机开发_「新阁教育」自由口通信上位机实战案例
  9. 计算机网络整体框架理解与把握(持续更新)
  10. 【渝粤教育】 国家开放大学2020年春季 2246社会工作概论 参考试题