我想在我的Firefox OS应用程序中使用MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)中描述的伟大Promise接口。但是从Firefox 1.3(模拟器)开始,它似乎不受支持(“Promise未定义”)。
是否有一个有效的polyfill,其语法与MDN上的规范一致?一旦未来版本支持真正的Promises接口,我不想重写所有内容。
这个在带有Web Workers的Firefox OS中不起作用:https://github.com/jakearchibald/es6-promise原因:它使用了“window”全局变量。
这与MDN规范略有不同:https://github.com/slightlyoff/Promises - 即:MDN规范说明
new Promise(function (resolve, reject) { /*...*/ resolve(); /*...*/ });
...这个polyfill想要使用这种语法(它使用所谓的“解析器”):
new Promise(function (r) { /*...*/ r.resolve(); /*...*/ });
答案 0 :(得分:2)
我刚刚尝试过模拟器,可以获得认证应用上的承诺。实际上,如果你得到模拟器,并调试模拟器附带的任何应用程序(拨号器,摄像头...),你将有一个控制台,你可以检查可用的资源,你会看到Promise如何可用。 / p>
还尝试在手机上运行gecko master,它至少可以用于特权应用。
如果你去工具>我想到了一个想法。附加组件你可以看到模拟器作为扩展,在偏好中它有一个选择你的二进制文件的选项,也许你可以从这里下载最新版本:
http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-central/
并尝试一下。
答案 1 :(得分:0)
只需简单的
var window = self;
我的Web Worker中的将使https://github.com/jakearchibald/es6-promise的polyfill工作。
这是一个答案,它至少解决了这个问题。不过,我对此并不满意。在我看来,在工作范围内定义一个全局窗口变量迟早会产生致命的后果 - 例如当一些包含的JavaScript库试图检查它是否在Web Worker等内部运行时。
然而,正在进行修复:https://github.com/jakearchibald/es6-promise/pull/6