2014-02-19 30 views
0

有什麼辦法可以處理require()的失敗?require()失敗後,dojo/ready永遠不會解析

在我的應用程序中,我加載模塊以響應用戶的操作。現在

require(["some/module"], function(module){...}); 

,如果需要失敗,說由於404或結果的語法錯誤,那麼從這個角度上道場/就緒NEVER解決,在我的應用程序的任何其他代碼在道場等待/就緒從未運行。例如:

require(['dojo/ready', 'other/stuff'], function(ready) 
{ 
    ready(function() {...do stuff...}): 
}); 

永遠不會「做東西」。我已經使用require.on(「error」,errfunc)來獲得問題的通知,並且我可以恢復(或者至少告訴用戶出錯了),但是因爲dojo/ready現在是永遠無法解析的,所以整個應用程序很漂亮許多停止工作。

+0

當你使用'dojo/ready'時你的目標是什麼?你所描述的是__可能是'dojo/ready'中的一個缺陷,而且自從AMD以來,它的使用已經或多或少被棄用了。 –

+0

我有一個相當大的模塊,可能會在應用/頁面加載時加載,或者稍後可能會按需加載。該應用程序已有數年的歷史,並且包含pre-amd dojo.requires/provides和amd模塊,並使用dojo.addOnLoad來排隊初始化函數。我正在使用dojo/ready來確保應用程序在執行某些功能之前已完全初始化。 有可能我需要重新審視一些應用程序如何掛在一起。 –

回答

0

我不明白這可能永遠不是一個好主意,你不用任何語言來做這種東西(根據用戶輸入加載依賴/模塊/類)。如果你真的想這樣做,你可以隨時選擇多個包裹陳述require(),例如:

require(["dojo/ready"], function(ready) { 
    require(["..."], function(module) { 

    }); 
}); 

雖然我沒有測試它,我想這會工作。根據你想要的,你也可以這樣做:

require(["dojo/ready"], function(ready) { 

}); 

require(["..."], function(module) { 

}); 
+1

我不同意你的前提。我不打算爲用戶可能參與的每個可能的活動加載所有可能的模塊,特別是如果它不在捱打路徑中,而是等到用戶請求這一點功能來加載必要的代碼。我還想使用dojo/i18n!some/module/nls/resources來加載可選的字符串資源。無法完成,因爲如果它不在那裏,就會停止dojo/ready。只需要尋找一種方法來滿足dojo/ready面對需求中的錯誤。 –