次のような起動/起動を実行する必要があるアプリケーションを入手しました。
- ajax
- 動的requirejs
- ルーティング、何か他のものを設定する
実行する前に。
私は今、これらのタスクをしっかりと一緒に整理するのに苦労しました。特に非同期動作は私に頭痛の種を与えています。現在、取得した結果を共有し、アプリケーションの状態を監視するためにイベントを使用しています。残念ながら、これはワイン醸造的で不便ながらくたをもたらしました。次に、q、jquery.deferedなどのpromiseライブラリを使用してみましたが、実際には問題と一致しません。
これは、コードの簡略化されたバージョンです。
// this could be an ajax call fetching some user data
var fetchUser = function() {
var user = {};
// lets emulate the ajax call with setTimeout
setTimeout(function() {
// set some values
user.username = 'bodo';
user.password = 'helloKitty';
// return the user object we "fetched"
return user;
}, 300);
};
// this could fetch some config or some requirejs modules
var fetchConfig = function() {
var config = {};
// we emulate this too...
setTimeout(function() {
return config;
}, 200);
};
// this could be anything else like setting up some objects
var justSetUpSomething = function() {
var someObj = {};
someObj.router = 'this could be a router object for example';
someObj.logger = 'or a logger';
return someObj;
};
// in the final step everything should be merged together
// and be passed as event argument
var finalStep = function(user, config, someObj) {
var mainObj = {};
mainObj.user = user;
mainObj.config = config;
mainObj.someObj = someObj;
// trigger some event system
trigger('everything:ready', mainObj);
};
http://jsfiddle.net/uzJrs/3/でも表示可能
これが私の問題を説明していることを願っています:
3つのまったく異なる非同期タスクがあります。すべての準備ができたら、結果をマージして、何らかの方法で別のオブジェクトに渡す必要があります。
イベントはこれを実行可能にしますが、理解できるとはほど遠いものであり、約束も私を本当に幸せにしません。他に役立つデザインパターンはありませんか?