为了账号安全,请及时绑定邮箱和手机立即绑定

Promise源码中safeThen函数如何理解?

Promise源码中safeThen函数如何理解?

明月笑刀无情 2019-03-14 18:15:31
源码看这里Promise.prototype.then = function(onFulfilled, onRejected) {  if (this.constructor !== Promise) {    return safeThen(this, onFulfilled, onRejected);  }  var res = new Promise(noop);  handle(this, new Handler(onFulfilled, onRejected, res));  return res;};function safeThen(self, onFulfilled, onRejected) {  return new self.constructor(function (resolve, reject) {    // 以下不是很理解    var res = new Promise(noop);    res.then(resolve, reject);    handle(self, new Handler(onFulfilled, onRejected, res));  });}
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

没太研究过,这应该是某个polyfill的Promise实现吧?V8的Promise应该是cpp写的。

这段代码看起来应该是为了让一些继承自Promise的子类运行正常。


查看完整回答
反对 回复 2019-03-29
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

最好附上这段代码的来源,因为 Promise 有很多实现,这样写看不太出来作者有何想法。

另外还有一个办法,寻找这一行的提交记录,看看作者写的时候是怎么想的。


查看完整回答
反对 回复 2019-03-29
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

就比如


const getVal = new P(resolve => resolve('todo'));

getVal.then.bind(window).then((val) => { console.log(val) });


// 上面的bind改变了then的上下文,就会安全的执行safeThen


查看完整回答
反对 回复 2019-03-29
  • 3 回答
  • 0 关注
  • 590 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号