Promise 学习心得
当了这么久码农到今天没事才开始去深究 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 学习心得相关推荐
- 数据科学学习心得_学习数据科学时如何保持动力
数据科学学习心得 When trying to learn anything all by yourself, it is easy to lose motivation and get thrown ...
- 2017年11月学习心得报告
学习心得报告 2017.11.30 以下分为五个部分: 一. 关于git的学习 二. 关于fis3的学习 三. 关于es6的学习 四.关于Jquery的学习 五.关于sublime Text3的熟悉 ...
- Java EE学习心得
–Java EE学习心得 1. 称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...
- Assembly学习心得
http://blog.csdn.net/etmonitor/ Assembly学习心得 说明: 最近开始准备把学到的.NET知识重新整理一遍,眼过千遍不如手过一遍,所以我准备记下我的学习心得,已备参 ...
- 对于mysql存储过程感想_存储过程学习心得
存储过程学习心得 (2014-12-28 17:28:06) 标签: it 我使用过几次SQL Server,但所有与数据库的交互都是通过应用程序的编码来实现的.我不知到在哪里使用存储过程,也不了解实 ...
- 好程序员Web前端教程分享Vue学习心得
为什么80%的码农都做不了架构师?>>> 好程序员Web前端教程分享Vue学习心得,Vue是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向 ...
- 大学计算机课英语心得体会,关于计算机网络辅助大学英语教学的思考学习心得...
关于计算机网络辅助大学英语教学的思考学习心得 [摘要]计算机网络辅助教学可以增强学生的学习兴趣,提高他们自觉学习的能力,因而得到了大多数学生的认可,取得了比较显著的成效.计算机网络辅助教学也对大学英语 ...
- 我的MYSQL学习心得(十六) 优化
原文:我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(十六) 优化 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看 ...
- Spring Framework------version4.3.5-----Reference学习心得-----总结
1.Spring Framework概述: 有很多可用版本,网址http://projects.spring.io/spring-framework/ 2.Spring Framework ...
最新文章
- SqlServer索引的原理与应用
- 计算机最小二乘法拟合,数值计算_第6章 曲线拟合的最小二乘法.doc
- EasyExcel实现写操作
- 【Python】判断字符串中是否含有某个子串
- 数据库设计规范 zhuan
- 前端如何实现网络速度测试功能_如何通过fiddler的断点功能,来实现不同场景的测试...
- practice:如何使用2008R2上的AD管理中心
- 《C++ 进阶心法》书籍修正记录
- SQL Sever — 导入数据与导出数据到表的方法
- 百度浏览器启动公司级内测 截图首度曝光
- 利用C#实现Pdf转图片
- 我的八年硕博士生涯——CMU王赟写在入职Facebook之前
- 渐变按钮 css,CSS3 Gradient Buttons
- vmwareshanch删除快照以及删除快照时卡住的解决办法
- [2001-2003美/新等合拍经典奇幻大片][魔戒1-3][BD-RMVB][中英字幕/1280x720高清晰版]
- 诊断和响应故障_恢复表和表分区
- 【矩阵论】线性空间与线性变换(6)
- JVM内存结构和垃圾回收算法
- WT588D使用记录
- C++ 静态成员变量与静态成员函数
热门文章
- 【技术解决方案】音视频同步策略分析并计算出当前音频播放的pts
- 【WebRTC---入门篇】(八)WebRTC核心之RTP Medio 媒体控制与数据统计
- C 运算符和语句总结
- python gitlab_Python Gitlab Api 使用方法
- java map 如何根据key获得对象_ThreadLocal:Java中的影分身
- linux mint 18支持安卓编译,Linux mint 18版本开启SSH服务
- oracle42997,oracle与db2的比较
- pythonqt4上位机开发_「新阁教育」自由口通信上位机实战案例
- 计算机网络整体框架理解与把握(持续更新)
- 【渝粤教育】 国家开放大学2020年春季 2246社会工作概论 参考试题