谈谈你对Promise的理解
这是一个见仁见智的问题
个人总结:
Promise 是异步编程的一种解决方案,将异步操作以同步操作的流程表达出来,避免了回调地狱的问题。
Promise 是一个构造函数,我们可以通过该构造函数来生成Promise的实例。
Promise
对象有以下两个特点:
(1)对象的状态不受外界影响。Promise 即承诺,后续必要兑现,一旦兑现则不可更改!其有三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败)。
(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise
对象只有两种状态改变:从pending
变为fulfilled
和从pending
变为rejected
。只要这两种情况发生,状态就不会再变了。
Promise
也有一些缺点:
首先,无法取消Promise
,一旦新建它就会立即执行,无法中途取消。
其次,如果不设置回调函数,Promise
内部抛出的错误,不会反应到外部。
第三,当处于pending
状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
Promise 的实例可以看做是一个状态展示器,我们可以将拥有状态及改变状态的业务通过Promise来实现,然后再结合async function进一步提升程序的可读性及易维护性。
Promise虽然解决了我们项目开发中的很多问题,但我们也不能无脑的滥用。比如Promise.all,如果参数中promise有一个失败(rejected),则此实例回调必然失败(reject),就不会再执行then方法的回调了。在实际中可能只是一个不关键的数据加载失败,往往会导致其他所有的数据不会显示,使得项目的容错性大大降低。所以在开发过程中只会在必须依赖这几个步骤全部加载成功后才能继续向下执行的场景中采用它,比如继某一个函数执行结果之后再进行入后续操作、图片的预加载。
以上综合参考了:阮一峰的《ECMAScript 6 入门》的Promise一章和张培跃的《web前端面试题对答篇:谈谈你对Promise的理解》
本文作者:何以之
本文链接:https://www.cnblogs.com/serendipity-echo/p/15403954.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步