我正在测试我的指令,该指令在控制器中使用Restangular进行一些API调用。
对于Restangular使用的promises函数,我正在嘲笑这些函数并将我的主模型放在一起,如下所示:
model = {
comments: comments,
one: function () {
deferred = $q.defer();
return deferred.promise;
},
post: function () {
deferred = $q.defer();
return deferred.promise;
},
remove: function () {
deferred = $q.defer();
return deferred.promise;
}
};
因此在执行运行Restangular函数的函数时,例如:
$scope.model.post('comments', newComment).then(...);
我自己决定拒绝或解决它:
deferred.reject();
$scope.$digest();
一切正常,但是当函数嵌套时却没有,例如像这样:
$scope.model.one('comments', comment.id).remove().then(...);
在这种情况下,我收到一个错误,删除未定义(虽然我已定义):
TypeError: 'undefined' is not a function (evaluating '$scope.model.one('comments', comment.id).remove()')
我错过了什么吗?
答案 0 :(得分:0)
你的函数'one'返回一个promise而不是模型本身。函数'remove'在模型上但不在promise上。你可以使用'then'链接promise,但是你不能链接你的模型函数。
此代码:
$scope.model.one('comments', comment.id).remove().then(...);
相当于:
var promise = $scope.model.one('comments', comment.id);
promise.remove(); // error: 'remove' is undefined!
你的代码的另一个问题是你定义延迟对象,并返回promises(这很好),但你永远不会通过调用延迟对象的'resolve'或'reject'函数来'解析'或'拒绝'你的promise