1

使用以下代码:

function cancelChanges() {
    if (datacontext.manager.hasChanges()) {
        return datacontext.manager.rejectChanges();
    } else {
        console.log("No changes to save");
    }
}

如果我这样称呼它:

         cancelChanges()
                .then(function () {
                    console.log("Changes Cancelled");
                })

我得到“对象没有方法'然后'”。如果我使用saveChanges,它可以工作。另一个问题是该else语句没有返回任何东西,所以我会在.thenand.fail调用中得到一个错误......如何解决这个问题以使用 Promise?

4

3 回答 3

3

Breeze 只返回异步方法的 Promise。这是设计使然。但正如另一位发帖人指出的那样,你总是可以从已经实现的结果中构建一个承诺。

于 2013-08-08T17:56:08.240 回答
2

您可以使用 Angular$q服务创建自己的承诺。

 function cancelChanges() {
    var deferred = $q.defer();
    if (datacontext.manager.hasChanges()) {
        datacontext.manager.rejectChanges();
        deferred.resolve("Changes Cancelled");
    } else {
        deferred.reject("No changes to save");
    }
    return deferred.promise;
 }

    cancelChanges()
            .then(function (result) {
                console.log(result);
            })
于 2013-08-08T16:50:46.120 回答
0

cancelChanges对于当时的 Jonathan Palumbo(他有正确的想法)提出的建议,这是一个稍微经济一点的语法:

 function cancelChanges() {
    if (datacontext.manager.hasChanges()) {
        datacontext.manager.rejectChanges();
        return $q.when("Changes Cancelled");
    } 
    return $q.reject("No changes to save");
 }

请参阅$q 的 API 文档

PS:我有点困惑,为什么您希望该方法在没有要取消的更改时失败,而不是返回成功路径。而且我不明白为什么这是一个异步方法。我想你有你的理由。

于 2013-08-09T16:03:20.673 回答