浅析JavascriptES6中的原生Promise.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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,

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档