欢迎来到天天文库
浏览记录
ID:30517232
大小:18.57 KB
页数:7页
时间:2018-12-31
《浅析javascript es6中的原生promise》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解浅析JavascriptES6中的原生Promise 前言 一个Promise对象可以理解为一次将要执行的操作(常常被用于异步操作),使用了Promise对象之后可以用一种链式调用的方式来组织代码,让代码更加直观。而且由于Promise.all这样的方法存在,可以让同时执行多个操作变得简单。 Promise的兴起,是因为异步方法调用中,往往会出现回调函数一环扣一环的情况。这种情况导致了回调
2、金字塔问题的出现。不仅代码写起来费劲又不美观,而且问题复杂的时候,阅读代码的人也难以理解。 举例如下: db.save(data,function(data){ //dosomething... db.save(data1,function(data){ //dosomething... db.save(data2,function(data){ //dosomething... done(data3);//返回数据 }) }); });对党的认识也有了进一步的提高。才真正体会到了中国共产党的
3、伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解 假设有一个数据库保存操作,一次请求需要在三个表中保存三次数据。那么我们的代码就跟上面的代码相似了。这时候假设在第二个db.save出了问题怎么办?基于这个考虑,我们又需要在每一层回调中使用类似try...catch这样的逻辑。这个就是万恶的来源,也是node刚开始广为诟病的一点。 另外一个缺点就是,假设我们的三次保存之间
4、并没有前后依赖关系,我们仍然需要等待前面的函数执行完毕,才能执行下一步,而无法三个保存并行,之后返回一个三个保存过后需要的结果。(或者说实现起来需要技巧) 不幸的是,在我刚开始接触node的时候,我写了大量这样的hell。 后来因为还是写前端代码多一些,我接触了ES6,发现了一个解决回调深渊的利器Promise。 其实早在ES6的Promise之前,Q,when.js,bluebird等等库早就根据Promise标准(参考Promise/A+)造出了自己的promise轮子。 (看过一篇文章,我觉得很有道理。里面说,不要扩
5、展内置的原生对象。这种做法是不能面向未来的。所以这里有一个提示:使用扩展原生Promise的库时,需要谨慎。) 这里仅讨论原生的Promise。 ES6Promise对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解 Promise对象状态 在详解Promise之前,先来点理论: Promise/A+规范,规定
6、Promise对象是一个有限状态机。 它三个状态: 1、pending(执行中) 2、fulfilled(成功) 3、reject(拒绝) 其中pending为初始状态,fulfilled和rejected为结束状态(结束状态表示promise的生命周期已结束)。 状态转换关系为: pending->fulfilled,pending->rejected。 随着状态的转换将触发各种事件(如执行成功事件、执行失败事件等)。 Promise形式 Promise的长相就像这样子: varpromise=newProm
7、ise(functionfunc(resolve,reject){ //dosomthing,maybeasync if(success){ returnresolve(data); }else{ returnreject(data);对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解 } })
8、; promise.then(function(data){ //dosomething...e.g console.log(data); },function(err){ //dealtheerr. }) 这里的
此文档下载收益归作者所有