关于Promise

自从Saleforce进入Lightning时代,Promise这个在前端领域耳熟能详的名词,如当年鸦片战争的坚船利炮一般,强行闯入了Salesforce开发者的世界。

也不想谈太多的技术细节,因为Promise作为ES6的新特性,汉语的,英语的,日语的资料也是林林总总的非常详细。比如阮一峰老师的《ECMAScript 6 入门》中的此章节

其实Promise理解起来也很简单,就是按字面意思,我许诺,这事我答应你了去办。
事儿我解决了,就是resolve,没办成,就是reject。事儿办成以后咱看看下一步怎么办,就是then。如果中间出岔子了,后面的不管了,直接去找谁谁谁,就是catch。不管事儿办没办成,最后告诉我一声,就是finally。

Promise的出现可以说是为了解决Callback Hell,回调地狱。甚至还有一个网站来介绍回调地狱是什么。http://callbackhell.com/
在前端开发的上古时代,回调地狱是非常常见。在代码缩略图上
能明显的看到代码的形状是>型。
顾名思义,回调,就是我找你办事,我托你办事的时候同时也嘱咐你这件事儿办完了做什么。就是我把你处理完成时要调用的方法先传给你。
一般回调地狱发生的重灾区是多步骤的AJAX。因为AJAX调用是异步的。比如,先发AJAX请求获取一个token,然后发AJAX请求获取一个user的Id,然后再发一个AJAX请求去获得这个user的数据等等。每一步的下一步要在发出AJAX请求之前就作为回调设好。强行的将一堆异步的处理变成严格的按照先后顺序执行。

那么Promise的意义就在于,把>型的代码嵌套变成了流线型的new Promise(getToken()).then(value => getUser(value);).then(value => getRecord(value)).catch(e => console.error(e)); 在感官上更贴合“
将一堆异步的处理变成严格的按照先后顺序执行。 ”的目标。

如果说,Promise只是从>型变成了|型或者—型,好处还不够多。更重要的一点,与回调地狱写法相比,Promise提供了很好的异常处理机制。只要then链中任何一环抛出异常,都会直奔catch集中处理。

但是Promise也非完美,在极复杂情况下,比如根据上一步的返回值,要执行完全不同的业务流程,promise链就会略显无力。与此同时整条Promise链也会变的及其冗长,优点损失殆尽。还有异常处理的一些坑等有时间在讲。

所以在代码结构设计与业务流程上应尽量规避极其复杂与冗长的回调链。毕竟代码还是需要人来阅读。

Salesforce开发者也应该多去了解前端技术,看看这个世界已经发展到了什么样子,而不是固步自封在SFDC的小圈子里。

3+

《关于Promise》有一个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据