web前端面试题对答篇:谈谈你对Promise的理解

回答这个问题时,个人不建议单纯的从Promise的细节知识点答起,因为这个问题的本质是拥有一定宏观性的,如果仅仅回复一些知识点恐怕是满足不了面试官胃口的。

当然,如果这个问题回答不到点上,那么后续面试官极有可能会抛出一些相关知识难点来对你进行打压。倘若知识点也回答不出来,那么只能出门右拐了……

所以建议你结合自身项目工作经验可以考虑从以下几个点去回答即可:

1、Promise 是一个构造函数,我们可以通过该构造函数来生成Promise的实例。

2、Promise 即承诺,后续必要兑现,一旦兑现则不可更改!其状态有三:pending(等待)、resolved(成功)、rejected(失败)。

3、Promise 是对回调函数的一种封装,是对异步编程的一种改进(传统解决异步编程的方式是通过回调函数,而回调嵌套过多会导致回调地狱(callbackhell)),我们可以通过Promise将自己的程序以同步的方式表达出来,从而可以解决代码臃肿及可读性差的问题。

4、Promise 的实例可以看做是一个状态展示器,我们可以将拥有状态及改变状态的业务通过Promise来实现,然后再结合async function进一步提升程序的可读性及易维护性。

5、与前端相关的很多技术体系库均采用了Promise对象,比如Axios、antd等等,所以了解、熟练并合理的使用它是一名合格前端必备的技能。

6、在实际项目的开发中经常会遇到继某一个函数执行结果之后,再进行入后续操作的场景,通过Promise就是一种非常好的解决方案。比如我们可以通过Promise对ajax进行封装用于实现业务逻辑与数据的分离。

7、Promise虽然解决了我们项目开发中的很多问题,但我们也不能无脑的滥用。比如Promise.all,如果参数中promise有一个失败(rejected),则此实例回调必然失败(reject),就不会再执行then方法的回调了。在实际中可能只是一个不关键的数据加载失败,往往会导致其他所有的数据不会显示,使得项目的容错性大大降低。所以我个人在开发过程中只会在必须依赖这几个步骤全部加载成功后才能继续向下执行的场景中采用它,比如图片的预加载功能。
—————END—————
喜欢本文的朋友们,欢迎关注公众号 张培跃,收看更多精彩内容!!

猜你喜欢

转载自blog.csdn.net/u012149969/article/details/108084460
今日推荐