Durandal を利用した HotTowel SPA テンプレートを使用しています。私の Durandal ViewModels では、Breeze を使用してデータベースからデータを取得しています。
すべての簡単なクエリを入れる datacontext クラスがあり、クエリはすべて次のようなパターンに従います。
getAthletes: function (queryCompleted) {
var query = breeze.EntityQuery.from("Athletes");
return manager
.executeQuery(query)
.then(queryCompleted)
.fail(queryFailed)
}
ビュー モデルの activate メソッドで非同期呼び出しを行っているため、これらの呼び出しから返される promise を activate メソッドで返す必要があります。
単一のクエリを使用すると、次のようにうまく機能します。
function activate() {
datacontext.getAthlete(loadAthlete);
}
ただし、2 つのクエリを実行する必要がある場合、問題が発生しますが、これはアプリケーションのリリース バージョンでのみ発生します。私は次の構文でこれをやろうとしました:
function activate() {
datacontext.getAthlete(loadAthlete).then(datacontext.getOtherData(loadOtherData));
}
これはデバッグ モードでは問題なく動作しますが、サーバーにデプロイしてスクリプトをバンドルすると、あまり明確ではない例外が発生します。
t は関数ではありません
また、以下のように datacontext クラスでそれらをチェーンしようとしましたが、それでも同じエラーが発生します。
getAthleteAndEfforts: function (athleteId, athleteQueryCompleted, effortsQueryCompleted) {
var athleteQuery = breeze.EntityQuery.from("Athletes").where("id", "==", athleteId);
var effortsQuery = breeze.EntityQuery.from("BestEfforts").where("athleteId", "==", athleteId);
return manager.executeQuery(athleteQuery).then(athleteQueryCompleted)
.then(manager.executeQuery(effortsQuery).then(effortsQueryCompleted))
.fail(queryFailed);
}
だから私は Q.defer() を適切に使用するのに十分理解していないか、何か他のことが起こっていると仮定しています。
これを達成するための正しい構文は何ですか?