fetch与promise.finally

es7里面的Promise.prototype.finally,可以通过core-js的polyfill来补全。

本以为加上了core-js就可以了,但真的遇到不支持的浏览器仍然会报没有finally方法的错误。

打开控制台调试,发现Promise.prototype.finally已经打上补丁是存在的。

最后发现,在chrome中

const f = fetch()
f instance of Promise // true

在火狐的低版本浏览器中

const f = fetch()
f instance of Promise // false

 

fetch返回的是个伪Promise对象,并不是全局Promise的实例,怪不得没有finally方法。

干脆通过自己加上一段代码polyfill上去得了

;(function() {
  const f = fetch()
  if (f.__proto__ && !f.__proto__.finally) {
    f.__proto__.finally = function(callback) {
      return this.then(callback).catch(callback)
    }
  }
})()

关于 admin

所有重要的进步,都来源于失败和挫折的经历
此条目发表在 ecmascript 分类目录。将固定链接加入收藏夹。