2014-02-25 51 views
2

我想使用我的Firefox OS應用程序在MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)上描述的偉大的Promise接口。但從Firefox 1.3(模擬器)看來似乎並不支持(「Promise is undefined」)。在Firefox OS中使用Promises

是否有一個工作的polyfill,其語法與MDN上的規範一致?未來的版本支持真正的Promises接口後,我不想重寫所有內容。

這個不能在Firefox OS和Web Workers下工作:https://github.com/jakearchibald/es6-promise原因:它使用「window」全局變量。

這一個從MDN規格略有differes:https://github.com/slightlyoff/Promises - 即:當MDN規範說

new Promise(function (resolve, reject) { /*...*/ resolve(); /*...*/ }); 

...這個填充工具要使用此語法(它使用所謂的「解析」):

new Promise(function (r) { /*...*/ r.resolve(); /*...*/ }); 

回答

0

只是把簡單的

var window = self; 

在我的我們b工作人員將使https://github.com/jakearchibald/es6-promise的polyfill工作。

這是一個答案,它至少可以解決問題。儘管如此,我對此並不滿意。在我看來,像在工作範圍內定義全局窗口變量遲早會產生致命的後果 - 例如,當一些包含的JavaScript庫嘗試檢查它是否是一個網絡工作者的內部運行等

但是一個解決辦法是在醞釀:https://github.com/jakearchibald/es6-promise/pull/6

2

我只是嘗試了模擬器,可以先手的承諾工作經過認證的應用實際上,如果你得到模擬器,並調試模擬器(撥號器,相機...)隨附的任何應用程序,你將有一個控制檯,在那裏你可以檢查可用的資源,你會看到Promises如何可用。

也嘗試在手機上運行gecko master,它至少可用於特權應用程序。

只是出現在我腦海的一個想法,如果你去工具>附加組件,你可以看到模擬器作爲擴展,在首選項中它有一個選項來選擇你的二進制文件,也許你可以從最新版本下載在這裏:

http://ftp.mozilla.org/pub/mozilla.org/b2g/nightly/latest-mozilla-central/

,並給它一試。

+0

確實,Promise支持認證的應用程序。但是,憑藉我的特權(這意味着它的「清單中的類型:特權」),它不起作用。也許它會工作,一旦該應用程序通過市場認證等。但我不明白,爲什麼這不應該爲普通的打包應用程序?! – thomas

+0

托馬斯,與最新版本的壁虎,特權應用程序允許使用承諾,這就是爲什麼我建議更新您的模擬器正在使用的B2G二進制文件。 –

+0

啊,好的,那真是有價值的信息:-) – thomas

相關問題