我正在使用利用 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() 的理解不足以正确使用它,或者还有其他事情发生。
完成此操作的正确语法是什么?