我很好奇是否可以在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可能是将异步转换为同步调用的其他方式。
答案 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)