首页 > 解决方案 > 仅在 Firefox 上:finally 不是函数 | 被包覆盖的承诺

问题描述

注意:问题已在此处解决。这是一个包裹的问题。

我刚刚在 Firefox 64.x 上测试了我的网站并看到了错误:

Unhandled promise rejection TypeError: "ic.all(...).then(...).catch(...).finally is not a function"
    Vl https://use.fontawesome.com/releases/v5.7.0/js/all.js:1:1098907
    Promise http://9fcca2ff.eu.ngrok.io/js/vendor.js:183682:7
    Vl https://use.fontawesome.com/releases/v5.7.0/js/all.js:1:1098761
    i2svg https://use.fontawesome.com/releases/v5.7.0/js/all.js:1:1107850
    Pl https://use.fontawesome.com/releases/v5.7.0/js/all.js:1:1110939
    <anonymous> https://use.fontawesome.com/releases/v5.7.0/js/all.js:1:1111071

我真的不明白为什么我有这个问题,因为我使用的是 Firefox 64.x,它最终应该是默认的。

要测试我是否在控制台中键入:

Promise.resolve(42).finally(() => console.log('jo'));

我得到错误:

TypeError: Promise.resolve(...).finally 不是函数[了解更多]

奇怪的是,它只在我的网站上。如果我去其他网站并在控制台中输入它,它总是可以工作......

作为我项目的辅助信息,我正在使用:

-webpack 3.x -vue 2.6.0 -node 10.5.0 -npm 6.5.0 -laravel 5.7.x

对于 babelrc 我只使用:

{
    "plugins": [
        "@babel/syntax-dynamic-import",
        "@babel/plugin-proposal-class-properties"
    ]
}

对于我正在使用的polyfill

<script crossorigin="anonymous" src="https://polyfill.io/v3/polyfill.min.js"></script>

第一个谷歌查询给了我这个问题:Promise.prototype.finally() 在 Firefox 中损坏,但我没有使用 Vue-cli 并且我所有的包都在最后一次更新中......

谷歌的第二个查询给了我这个:Firefox Promise - getting finally is not a function?但它链接回第一个问题,说这是一个问题core.js。但我还不够好,无法理解如何解决它。

我怎样才能解决这个问题?

编辑1:

我找到了问题的根源。Algolia Place覆盖finally,你甚至可以去他们的演示页面,当你输入时你会注意到它Promise.toSource()

我的猜测是,他们的package.json使用不正确,因为"@babel/polyfill": "^7.2.5"它被列为依赖项,我猜这会迫使我的网页也使用它并覆盖finally

编辑2:

在 github 上打开了一个问题https://github.com/algolia/places/issues/725

标签: javascriptfirefoxes6-promise

解决方案


推荐阅读