Firefox插件:将异步转换为同步

时间:2013-07-26 11:00:46

标签: javascript asynchronous firefox-addon synchronous

我很好奇是否可以在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调用的函数。< / p>

但我偶然发现this article可能指出它是可能的。但是我找不到所需的模块(Sync.js文件)。该文章Link似乎没有用(服务器端代码中的错误?)Mozilla-central上的Firefox代码不知道此文件。

也许Web Workers或nsIThreadManager可能是将异步转换为同步调用的其他方式。

2 个答案:

答案 0 :(得分:1)

所以我找到了Sync.js module。它使用同步等待processNextEvent的下一个事件,直到将触发回调:

let thread = Cc["@mozilla.org/thread-manager;1"].getService().currentThread;
while (async callback not fired yet)
     thread.processNextEvent(true);

这个技巧似乎有效,但根据Marco Bonardo it is bad choice(崩溃?)

答案 1 :(得分:0)