我正在使用利用 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 方法中进行了异步调用,因此我必须在 activate 方法中返回从这些调用返回的承诺。
使用单个查询效果很好,如下所示:
function activate() {
datacontext.getAthlete(loadAthlete);
}
但是,如果我需要执行两个查询,我会遇到问题,但仅限于我的应用程序的发布版本。我尝试使用以下语法执行此操作:
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() 的理解不足以正确使用它,或者还有其他事情发生。
完成此操作的正确语法是什么?