使用以下代码:
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?
答案 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");
}
P.S。:我有点神秘,为什么你希望方法在没有取消更改时失败,而不是为此返回成功路径。我无法理解为什么这是一个异步方法。我想你有理由。