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

源码看这里

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));

  });

}


明月笑刀无情
浏览 591回答 3
3回答

12345678_0001

没太研究过,这应该是某个polyfill的Promise实现吧?V8的Promise应该是cpp写的。这段代码看起来应该是为了让一些继承自Promise的子类运行正常。

摇曳的蔷薇

最好附上这段代码的来源,因为 Promise 有很多实现,这样写看不太出来作者有何想法。另外还有一个办法,寻找这一行的提交记录,看看作者写的时候是怎么想的。

德玛西亚99

就比如const getVal = new P(resolve => resolve('todo'));getVal.then.bind(window).then((val) => { console.log(val) });// 上面的bind改变了then的上下文,就会安全的执行safeThen
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript