我只是好奇,如果可以在Firefox插件中調用一個函數,該函數將等待異步函數調用中的回調。它可能是有用的。Firefox插件:將異步轉換爲異步
例如
function async_func(callback) {
...
callback(2);
}
function callback_foo(x) { return x*x; }
var results = Sync.wait_for_async_callback(async_func, callback_foo);
// now, results is 2*2 = 4
....
我知道JavaScript引擎是一般一個線程,所以它不能同時運行同步的等待,在Sync.wait_for_async_callback
睡覺,調用async_func
或功能回調從async_func
調用。
但我偶然發現this article可能表明它有可能。但是我找不到這個需要的模塊(一個Sync.js
文件)。該文章上的Link似乎沒有用(服務器端代碼中的錯誤?)Mozilla-central上的Firefox代碼不知道此文件。
也許Web Workers或nsIThreadManager可能是將異步轉換爲同步呼叫的其他方式。
你爲什麼不只是使用一個回調? –
@AdrianLang 我知道回調一般是很好的解決方案,因爲不會凍結一個線程,但例如回調函數中需要返回值時不能使用。更大的問題是當某些東西不支持異步功能時,只會同步。 例如,Bookmark Favicon Change的擴展名爲[broken](https://bugzilla.mozilla.org/show_bug.cgi?id=834457#c17),因爲它需要重寫同步的內部Firefox功能,Mozilla刪除了一些同步功能。需要返回值不能在回調中返回。 – Greck