如不雅在异步操作中,多次履行resolve或者reject会反复处理后续回调,可以经由过程内置一个标记位解决。
总结
刚开端看promise源码的时刻总不克不及很好的懂得then和resolve函数的运行机理,然则如不雅你静下心来,反过来根据履行promise时的逻辑来推演,就不难解得了。这里必定要留意的点是:promise琅绫擎的then函数仅仅是注册了后续须要履行的代码,真正的履行是在resolve办法琅绫擎履行的,理清了这层,再来分析源码会省力的多。
如今回想下Promise的实现过程,其重要应用了设计模式中的不雅察者模式:
- 经由过程Promise.prototype.then和Promise.prototype.catch办法将不雅察者办法注册到被不雅察者Promise对象中,同时返回一个新的Promise对象,以便可以链式调用。
- 被不雅察者治理内部pending、fulfilled和rejected的状况改变,同时经由过程构造函数中传递的resolve和reject办法以主动触发状况改变和通知不雅察者。
参考文献
- 深刻懂得 Promise
- JavaScript Promises … In Wicked Detail
getUserId办法返回一个promise,可以经由过程它的then办法注册(留意注册这个词)在promise异步操作成功时履行的回调。这种履行方法,使得异步调用变得十分顺手。
【编辑推荐】
- Promise & Generator——幸福地用同步办法写异步JavaScript
- 只为那句承诺-大年夜话Promise
- [译]Async函数,让promise更友爱!
- Async/Await替代Promise的6个来由
- JavaScript异步与Promise实现
推荐阅读
16. 美国法律论坛71万账户泄漏,涉国度安然局、FBI等本年4月,达拉斯紧急警备孀体系被黑客入侵。导致该城市的156个紧急戒备器被激活,警笛声持续一个小时,激发市平易近惊恐。 在以前的201>>>详细阅读
本文标题:30分钟,让你彻底明白Promise原理
地址:http://www.17bianji.com/lsqh/35631.html
1/2 1