如何修改以下代碼以同步方式運行? AddonManager是一個異步調用,我無法獲得正確的結果。如何解決使用Javascript中的異步?
function initWithPrivs (java, ext_id, jarFiles) {
var [loader, urls] = init(java, ext_id, jarFiles);
policyAdd(loader, urls);
return [loader, urls];
}
function init (java, ext_id, jarFiles) {
var classLoader;
var fURLs=[];
JAVA = java;
try {
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("[email protected]",function(addon) {
//Some code to process fURLs and classLoader
//If i put return here its shows me error
}
);
return [classLoader,fURLs]; //If i use return here it return null.
}
catch(Exception e)
{
}
你不應該。這是異步的,因爲磁盤訪問需要時間。你可以稍微簡化使用生成器的異步代碼,但對於簡單的情況來說這不值得。 –
這是異步的,以加快在瀏覽器中加載頁面的速度。如果你的目標是「最小化加載速度」,那麼使這個同步似乎是一個很好的計劃,否則,不是那麼多。 – DwB
這似乎相當愚蠢,迫使一切都異步。結果是,你反覆調用這個過於抽象和臃腫的接口,一遍又一遍地完成同一任務的微小部分,而不是一次完成,然後使用相同的對象。我只是想檢索整個插件對象JUST ONCE,以便在十幾個訪問不同屬性的地方使用。在這個用例中,異步如何幫助任何人?由於冗餘調用和內存泄漏以及數量級更復雜的臃腫代碼而浪費了「節省的」微不足道的時間。 – user314159