Breeze rejectChanges()不返回承诺?

时间:2013-08-08 16:27:41

标签: angularjs breeze

使用以下代码:

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语句没有返回任何内容,因此我会在.then.fail调用时出错...如何修复此问题才能使用promises?

3 个答案:

答案 0 :(得分:3)

Breeze只返回异步方法的promise。 这是设计。但正如另一张海报所指出的那样,你总能从已经实现的结果中构建一个承诺。

答案 1 :(得分:2)

您可以使用角色中的$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);
            })

答案 2 :(得分: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");
 }

请参阅API documentation for $q

P.S。:我有点神秘,为什么你希望方法在没有取消更改时失败,而不是为此返回成功路径。我无法理解为什么这是一个异步方法。我想你有理由。