Мне просто интересно, если в Firefox-аддоне можно вызвать функцию, которая будет ждать обратного вызова при вызове асинхронной функции. Это может быть потенциально полезно.Firefox addon: конвертировать асинхронный в синхронный
Например
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 на эту статью не представляется полезным (ошибки в серверном коде?) Код Firefox на Mozilla-central не знает этот файл.
Возможно, веб-работники или nsIThreadManager могут быть другим способом конвертации async для синхронизации вызова.
Почему вы не просто использовать обратный вызов? –
@AdrianLang Я знаю, что обратный вызов, как правило, был бы хорошим решением, потому что он не застыл нить, но, например, обратный вызов не может использоваться, когда есть необходимость в возвращаемом значении в функции. Большая проблема заключалась бы в том, что что-то не поддерживает асинхронные функции, а только синхронизацию. Например, расширение Bookmark Favicon Change является [сломанным] (https://bugzilla.mozilla.org/show_bug.cgi?id=834457#c17), потому что ему необходимо переписать внутреннюю функцию Firefox, которая является синхронной, и Mozilla удалила некоторые функции синхронизации , Требуется возвращаемое значение, которое не может быть возвращено в обратном вызове. – Greck