【发布时间】:2015-09-30 08:04:35
【问题描述】:
我对 Angular JS deferred 和 $q 感到困惑。我发现这个SO Question 解释了$q.defer() 和$q 之间的区别。它解释了
$q.reject 是创建延迟然后立即拒绝它的快捷方式
所以$q.reject()必须等于
var deferred = $q.defer(); deferred.reject(),如果不是请说明两者的实际区别。
但在我的情况下,$q.reject() 工作正常,但 deffered.reject() 不工作。我们还需要返回拒绝的承诺,如$q.reject(),但不是deferred.reject()。我见过deffered.reject()没有回报的例子
这是代码
var deferred = $q.defer();
myService.getData()
.then(function(response){
deferred.notify('Just a notification');
deferred.reject('rejected');
})
.then(function(response) {
console.log('done');
}, function(response) {
console.log('rejected');
})
这不起作用,但是当我将deferred.reject 替换为$q.reject() 时,promise 已被拒绝,并且控件被移动到后续 then 块的错误函数。
非常感谢任何帮助。提前致谢。
【问题讨论】:
-
它在您的场景中根本不起作用,您将
.then(function (response...链接到.getData()已返回的承诺,而不是deferred已返回的承诺。为什么要这样做?这没有意义。
标签: javascript angularjs angular-promise