Breeze を使用する Angular アプリケーションがあり、異なるコントローラー用の共有 EntityManager があります。クエリを実行して EntityManager の MetadataStore を事前設定しなくても、いくつかのコントローラーにアクセスできます。ここで、アプリケーションの開始時にメタデータをフェッチするという開始方向をいくらか見つけました。私のプロジェクトは Angular-Breezejs テンプレートに基づいています。次のことをしようとすると、何かがデータコンテキストを使用する前に約束が完全に解決されないため、エラーが発生します。
app.factory('datacontext',
['breeze', 'Q', 'model', 'logger', '$timeout',
function (breeze, Q, model, logger, $timeout) {
logger.log("creating datacontext");
configureBreeze();
var manager = new breeze.EntityManager("/api/app");
manager.enableSaveQueuing(true);
var datacontext = {
metadataStore: manager.metadataStore,
saveEntity: saveEntity,
getUsers: getUsers,
getUser: getUser,
createUser: createUser,
deleteUser: deleteUser
};
return manager.fetchMetadata()
.then(function () {
model.initialize(datacontext);
return datacontext;
})
.fail(function (error) {
console.log(error);
return error;
});
//Function definitions
メタデータのフェッチが完了するまでブロックする適切な方法は何ですか? 上記のリンクされた質問の元の投稿者のように、各非クエリ関数 (エンティティの作成を含む) の前にメタデータが存在するかどうかを確認する必要はないようです。