【问题标题】:Uncaught ReferenceError: Promise is not defined未捕获的 ReferenceError:未定义承诺
【发布时间】:2014-06-05 00:57:08
【问题描述】:

我制作的 Chrome 应用程序对我来说非常好用,但另一个用户在启动它时收到错误 Uncaught ReferenceError: Promise is not defined。由于某种原因,它不明白 Promise 是什么。该代码在我这边工作得非常好,我以前从未遇到过这个错误,但用户每次都会得到它。这可能是什么问题?

【问题讨论】:

  • 问题是我的代码中没有这样的变量,即使我使用的版本与用户在我的 PC 上使用的版本相同,一切正常。我不知道发布代码是否会有所帮助,因为它是“丑陋的”并且很难阅读。问题可能是因为浏览器过时或其他原因吗?我什至查看了代码,并且只提到了两次 Promise,而且两次都正确使用了“new”关键字,如下所示:new Promise(function(a){})
  • 你的代码中一定有一些东西试图使用Promise(因为它说ReferenceError)。或者,如果您包含来自其他域的脚本,问题可能出在这些脚本中。
  • 这可能是因为浏览器过时,因为Promiseonly supported after Chrome 32
  • 一定是它!用户更新了他的浏览器,现在一切正常。

标签: javascript google-chrome promise google-chrome-app


【解决方案1】:

用户将 Chrome 更新到最新版本,并且显然已修复它。我不知道是怎么做到的,因为他的版本是 2013 年 12 月的,而且当时 Promises 肯定有效。我不知道。这绝对不是代码问题,因为我运行的版本与用户运行的完全相同,而且我从未遇到过该错误。

但是是的 - 显然是固定的。

编辑:显然 Promises 仅在 Chrome 32 之后才有效,所以是的,这就是错误的原因。

【讨论】:

  • 如果我是你,我不会使用原生 Promise,但使用 Bluebird 这样的库会更安全。
  • 什么意思?为什么不呢?
  • 它们是不稳定的,只提供了库功能的一小部分。它们的存在是为了与用户代码进行干净的互操作,而不是替换库。
【解决方案2】:

要支持 IE 和其他旧版本的浏览器,您应该考虑为 Promise 对象加载一个 polyfill。

您可以通过<script> 标签开箱即用地使用here

【讨论】:

    【解决方案3】:

    旧浏览器中的Primise

    ​Android 4.x 浏览器承诺

    我在 Android 4.X 浏览器中也遇到过类似的问题。我通过在 webpack 配置中使用 es6-promise 解决了这个问题: ​​​ ​承诺:'es6-promise' ​

    ​plugins: [
        ​    //tells webpack where to store data about your bundles.
        ​    new BundleTracker({filename: './webpack-stats.json'}),        ​
        ​    //makes jQuery available in every module
        ​    new webpack.ProvidePlugin({
        ​        $: 'jquery',        ​
        ​        jQuery: 'jquery',
        ​        'window.jQuery': 'jquery',
        ​        Promise: 'es6-promise'
        ​    }),
    ​    // Configure path for served CSS files ("desktop_css" will be served as /dist/desktop_css.css)    ​
    ​    new ExtractTextPlugin('[name].css'),    ​
    ​],
    

    我可以使用 Promise:​http://caniuse.com/#feat=promises


    一些相关链接:

    ​​axios IE promise doesn't work

    https://github.com/axios/axios/issues/188

    https://github.com/webpack/webpack/issues/4254

    【讨论】:

      【解决方案4】:

      不是该领域的专家,但也许这会对某人有所帮助。

      在 Android 4.4 上的 Cordova Android 应用上遇到了同样的问题。

      通过运行此命令修复

       1. cordova plugin rm cordova-plugin-inapppurchase --save
       2. cordova plugin add https://github.com/AlexDisler/cordova-plugin-inapppurchase#1968e41d173481eb2e6a536fdc55cc9e9253e6d5 --save 
      

      【讨论】:

        猜你喜欢
        • 2020-02-29
        • 2021-11-08
        • 2018-01-31
        • 2019-01-16
        • 2022-06-15
        • 2017-04-19
        • 1970-01-01
        • 1970-01-01
        • 2023-01-23
        相关资源
        最近更新 更多