- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析JavascriptES6中的原生Promise.doc
浅析 JavascriptES6 中的原生 Promise
、八 、?
刖S
一个Promise对象可以理解为一次将要执行的操作
(常常被用于异步操作),使用了 Promise对象之后可以用 一种链式调用的方式来组织代码,让代码更加直观。而且 由于Promise, all这样的方法存在,可以让同时执行多个 操作变得简单。
Promise的兴起,是因为异步方法调用中,往往会出现 回调函数一环扣一环的情况。这种情况导致了回调金字塔 问题的出现。不仅代码写起来费劲又不美观,而且问题复 杂的时候,阅读代码的人也难以理解。nbsp;
举例如下:
db? save (data, funct ion (data) {
nbsp;//dos omething???
nbsp; db. s ave (datal, f unction (dat a) {
nbsp://dosomethin g.??
nbsp;db. save(dat a2, function (data) {
nb sp;//dosome thing???
n bsp;done(da ta3) ;//返回数据
nbsp;}) nbsp ;});
});
假设有一个数据库保存操作,一次请求需要在三个表 中保存三次数据。那么我们的代码就跟上面的代码相似了。 这时候假设在第二个db. save出了问题怎么办?基于这个 考虑,我们又需要在每一层回调中使用类似try. . . catch 这样的逻辑。这个就是万恶的来源,也是node刚开始广为 诟病的一点。
另外一个缺点就是,假设我们的三次保存之间并没有 前后依赖关系,我们仍然需要等待前面的函数执行完毕,才 能执行下一步,而无法三个保存并行,之后返回一个三个 保存过后需要的结果。(或者说实现起来需要技巧)
不幸的是,在我刚开始接触no de的时候,我写了大量 这样的hello
后来因为还是写前端代码多一些,我接触了 ES6,发现 了一个解决回调深渊的利器Promisee
其实早在 ES6 的 P romise 之前,Q, when, js, blu ebird等等库早就根据Promise标准(参考Promise/A +) 造出了自己的pro mise轮子。nbsp ;
(看过一篇文章,我觉得很有道理。里面说,不要扩 展内置的原生对象。这种做法是不能面向未来的。所以这 里有一个提示:使用扩展原生Pr omise的库时,需要谨慎。) 这里仅讨论原生的Promise。
ES 6Promise
Pro mise对象状态 在详解Promise之前,先来点理论:
Prom ise/A+规范,规定Promise对象是一个有限状态机。 它三个状态:
1、 pending (执行中)
2、 fulf illed (成功)
3、 reject (拒绝)
其中pending为初始状态,fulfil led和rejecte d为 结束状态(结束状态表示promise的生命周期已结束)。 状态转换关系为:
pend ing-gt;fulf illed, pendi ng-gt;rejec tedo 随着状态的转换将触发各种事件(如执行成功事件、 执行失败事件等)。
Promi s e 形式
Promise的长相就像这样子:
v arpromise=n ewPromise (f unctionfunc (resolve, re ject) {
nbs p;//dosomth ing, maybeas ync nbsp;if (success) {
nbsp; return resolve (dat a);
nbsp;} el se {
nbsp;r eturnreject (data);
nbsp :} });
prom ise? then (fu notion (data ) {
nbsp://dosomething ??? e. g
nbs p; console. 1 og(data);
}, function(er r) {
nbsp;//d ealtheerr?
})
这里的变量pro mise是Promis e这个对象的实例。
promise对象在创建的时候会执行func函数中的逻辑。
逻辑处理完毕并且没有错误时,resolve这个回调会将 值传递到一个特殊的地方。这个特殊的地方在哪呢?就是 下面代码中的then,我们使用t hen中的回调函数来处理 resolve后的结果。比如上面的代码中,我们将值简单的输 出到控制台。如果有错误,则r eject到then的第二个回 调函数中,对错误进行处理。
配合上面的有限状态机的理论,我们知道在Promis e 构造函数中执行回调函数代码时,状态为pen ding, resolv e之后状态为fulfi lied,
您可能关注的文档
- 洁净室管理67818.doc
- 洁净空调计算机系统验证方案.doc
- 洁净系统及维护.doc
- 洁净风量验收标准及测试secret.doc
- 洁能cng燃气系统保修索赔处理流程.doc
- 洋铭科技在了解和聆听中创新.docx
- 洗染服务合约技术规范.docx
- 洗涤塔运行操作方案玻璃钢版本.doc
- 洗涤车间新设备清洗、钝化项目方案.doc
- 洛三高速公路lm2标段路面基层试验段施工方案.doc
- 浅析Javascript中bind()方法的使用与实现.doc
- 浅析JavaScript中命名空间namespace模式.docx
- 浅析JavaScript中浏览器的兼容问题.doc
- 浅析JavaScript中的array数组类型系统.doc
- 浅析JavaScript箭头函数generatorDateJSON.doc
- 浅析Java中的final关键字Java开发Java经验技巧.doc
- 浅析Java中的访问权限控制Java开发Java经验技巧.doc
- 浅析jQueryAjax通用js封装.doc
- 浅析jQuery遍历函数,javascript中的each遍历.doc
- 浅析JS异步加载进度条.docx
最近下载
- 康悦百万医疗保险C款介绍.pptx VIP
- 中国人寿.北京大学-中高净值家庭资产配置和保险保障白皮书.pdf
- Unit 2 Different families Part A Let’s learn & Listen and do(说课稿)-2024-2025学年人教PEP版(2024)英语三年级上册.docx
- 4D打印的应用、原理及发展前景.ppt VIP
- 22J403-1 楼梯 栏杆 栏板(一) (3).pdf VIP
- 青岛版(五四制)(2024)小学科学三年级上册《制作“冰琥珀”》教案.docx VIP
- 超低能耗建筑的增量成本与经济效益分析.pdf VIP
- 贵州省房屋建筑和市政工程标准施工招标文件(2021年版)【模板】.docx VIP
- 跨文化交际:中英文化对比 (13).ppt VIP
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf VIP
文档评论(0)