CommonJS AMDとDeferred
Writing Modular JavaScript With AMD, CommonJS & ES HarmonyのModules With Deferred Dependenciesが便利なので活用してる。
初期化処理が非同期処理でrequireしてきても即使えるとは限らない場合に使う。
モジュール側ではモジュールそのものではなくてpromiseを返しておいて、モジュールの実体が完成したらresolveで渡す。
使う側はrequireしてきたpromiseのthenメソッドのcallbackでモジュールの実体を受け取って使う。
// 何らかの非同期処理を経て初期化されるモジュール define('someModule',['jquery'],function($){ var dfd = $.Deferred(); setTimeout(function(){ // モジュールとして実際使いたいobject var module = {a:1}; dfd.resolve(module); },500); return dfd.promise(); });
// モジュールを使う側 require(['someModule'],function(someModule){ someModule.then(function(module){ console.log(module); // {a:1} }); });
こういったモジュール複数に依存している場合は
require(['someModule1','someModule2','someModule3'],function(someModule1,someModule2,someModule3){ $.when(someModule1,someModule2,someModule3).then(function(module1,module2,module3){ console.log(module1,module2,module3); }); });
ね、簡単でしょう?