-1

我只是好奇是否可以在 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.

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

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

4

2 回答 2

1

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

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

这个技巧似乎有效,但根据 Marco Bonardo的说法,这是一个糟糕的选择(崩溃?)

于 2013-08-07T10:57:12.693 回答
0

这是通过Promises完成的,请阅读基于此规范的{this documentation]( https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm ) 。

于 2013-07-28T23:22:39.627 回答