找不到变量:Safari上的Promise

c6ubokkw  于 2022-10-20  发布在  其他
关注(0)|答案(2)|浏览(197)

我有一个我正在开发的网站,它可以在Chrome桌面上完美运行(Windows 8.1&OS X Mavericks
当我在iOS 7Safari 7.0.2上运行它时,控制台出现错误
加载路由时出错:checkIfLoggedIn
它在消息中指定的成员不是路由,而是返回承诺的方法。当我通过ember代码进行调试以找出出了什么问题时,我发现它拒绝了promise,原因是
找不到变量:Promise
我无法在这里发布我的网站上的实际代码,所以我开始创建一个复制错误的提琴,我想出了这个:
http://jsfiddle.net/NQKvy/851/
这在Chrome桌面版(Windows 8.1和OS X Mavericks)上完美运行,但在iOS 7或Safari 7.0.2上会向控制台抛出以下错误
ReferenceError:找不到变量:Promise
有人知道为什么这不起作用吗?
重述:

  • 我已经在Chrome for Windows 8.1和OS X Mavericks上进行了测试-它可以工作
  • 我已经在Chrome for iOS上进行了测试,但它不起作用
  • 我已经在iOS和OS X Mavericks的Safari上进行了测试,但它不起作用
  • 我根本没有在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);
    });
};
fquxozlt

fquxozlt1#

事实证明,在Safari上,创建承诺时必须使用完全限定的名称,否则它将无法工作:

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”。承诺”而不是“新承诺”。这似乎为我解决了问题。

hjzp0vay

hjzp0vay2#

根据this,iOS Safari 7.1或Safari 7没有任何承诺。
然而,他们将在iOS Safari 8和Safari 8。

相关问题