鍍金池/ 問答/HTML/ Promise源碼中safeThen函數(shù)如何理解?

Promise源碼中safeThen函數(shù)如何理解?

源碼看這里

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));
  });
}
回答
編輯回答
我以為

最好附上這段代碼的來源,因為 Promise 有很多實現(xiàn),這樣寫看不太出來作者有何想法。

另外還有一個辦法,尋找這一行的提交記錄,看看作者寫的時候是怎么想的。

2018年7月24日 00:13
編輯回答
好難瘦

沒太研究過,這應(yīng)該是某個polyfill的Promise實現(xiàn)吧?V8的Promise應(yīng)該是cpp寫的。

這段代碼看起來應(yīng)該是為了讓一些繼承自Promise的子類運行正常。

2018年1月25日 03:46