【问题标题】:Can't find variable: Promise on Safari找不到变量:Safari 上的 Promise
【发布时间】:2014-03-17 18:26:52
【问题描述】:

我正在开发一个在 Chrome 桌面版(Windows 8.1OS X Mavericks)上完美运行的网站

当我在 iOS 7Safari 7.0.2 上运行它时,控制台出现错误提示

加载路由时出错:checkIfLoggedIn

它在消息中指定的成员不是路由,而是返回承诺的方法。当我通过 ember 代码调试以找出问题所在时,我发现它拒绝了承诺,原因是

找不到变量:Promise

我无法在此处发布我网站上的实际代码,因此我开始创建一个重现错误的小提琴,并且我能够想出这个:

http://jsfiddle.net/NQKvy/851/

这可以在桌面版 Chrome 上完美运行(Windows 8.1 和 OS X Mavericks),但在 iOS 7 或 Safari 7.0.2 上会向控制台抛出以下错误

ReferenceError: 找不到变量:Promise

有人知道为什么这不起作用吗?

回顾一下:

  • 我已在适用于 Windows 8.1 和 OS X Mavericks 的 Chrome 上进行了测试 - 它可以正常工作
  • 我在 Chrome for iOS 上进行了测试,但它不起作用
  • 我在 Safari for iOS 和 OS X Mavericks 上进行了测试,但它不起作用
  • 我根本没有在 Android 上测试过(我目前无法访问任何设备)

这让我相信这是一个 Safari 错误,因为(如果我没记错的话)Chrome for iOS 使用 Safari 控件而不是 Chromium 来呈现页面

这是我用来生成错误的代码:

App.ready = function() {
    var asdf = new Promise(function (resolve) {   
        var i = 1;
        i++;
        resolve.call(this,i);
    }).then(function (result) {
        alert('I: ' + result);
    });
};

【问题讨论】:

  • 嗯,我只是将代码更改为使用完全限定名称:new Ember.RSVP.Promise(...) 并且它似乎可以在我的 macbook 上的 Safari 中修复它......这很糟糕Ember 网站上的文档没有使用完全限定名称
  • 实际上很疯狂。感谢您发布解决方案
  • 我自己遇到了这个问题,试图弄清楚究竟是什么导致了这种行为。您使用的是ember-cli 还是只使用ember
  • 我自己用的是ember

标签: javascript ios ember.js safari


【解决方案1】:

事实证明,在 Safari 上,您必须在创建 Promise 时使用完全限定名称,否则将无法正常工作:

App.ready = function() {
    var asdf = new Ember.RSVP.Promise(function (resolve) {   
        var i = 1;
        i++;
        resolve.call(this,i);
    }).then(function (result) {
        alert('I: ' + result);
    });
};

注意“新的 Ember.RSVP.Promise”而不是“新的 Promise”。这似乎为我解决了这个问题。

【讨论】:

  • 如果我能给你十亿个赞,你就会得到十亿个赞!谢谢楼主!
  • 你好罗伯特,谢谢你的分享。是否有任何替代方法可以避免未为其他 Web 浏览器定义 Ember?因为我没有使用 jQuery,并且我避免包含 Ember.js,因为它的大小非常大。请问你知道更好的方法吗?
  • @tinyCoder 我认为这个问题超出了本文的范围,尝试发布一个新问题以获得答案
  • 嗨罗伯特,谢谢你,我已经这样做了,我得到了一个很好的答案,对于需要相同的人,它在这里:stackoverflow.com/questions/41922082
【解决方案2】:

根据this,iOS Safari 7.1 或 Safari 7 没有任何承诺。

但是,他们将在 iOS Safari 8 和 Safari 8 中获得它们。

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2018-06-09
    • 2013-12-11
    • 2021-01-21
    相关资源
    最近更新 更多