我对Angular JS和$ q感到困惑。我找到了这个SO Question来解释$q.defer()
和$q
之间的区别。
所以$q.reject()
必须等于var deferred = $q.defer(); deferred.reject()
,如果不是,请说明两者之间的实际区别。
但就我而言,$q.reject()
有效,但是deffered.reject()
不起作用。另外,我们需要返回被拒绝的 promise ,例如$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块的错误函数中。任何帮助是极大的赞赏。提前致谢。
最佳答案
当您使用deferred.reject
时,它不起作用,因为您没有返回新的被拒绝的 promise 。您可以同时使用$q.reject()
和deferred.reject()
,只需在两种情况下都返回一个Promise。
您需要了解
$q.reject()
被拒绝的 promise 对象deferred.reject()
是而不是一个 promise ,而是在其属性之一(即$promise
)中已拒绝 promise 的延迟对象。 因此,您可以返回任何对象或值,它将成为一个新的Promise对象,并将被传递给下一个然后是链中的块。但是,当您使用
return deferred.reject()
时,它将仅作为某个对象传递(再一次,这不是一个 promise ,但是它内部有一个 promise ),并且下一个 promise 当然会成功解决。如果您返回相应的promise,它也可以与
deferred
一起正常工作:var deferred = $q.defer();
myService.getData()
.then(function(response) {
deferred.notify('Just a notification');
deferred.reject('rejected');
return deferred.promise;
//return $q.reject();
})
.then(function(response) {
console.log('done');
}, function(response) {
console.log('rejected');
});
最后回答您的问题:
$q.reject()
是状态为“已拒绝”的promise对象。 deferred.reject()
是而不是一个 promise ,但是它拒绝了内部的Promise对象作为deferred.$promise
。使用什么?您应该使用$q.reject()
,在这种情况下使用虚拟的延迟对象是多余的,并且被认为是不正确的做法,实际上,它甚至有一个名字deferred anti-pattern。关于javascript - AngularJS deferred.reject不起作用但是$ q.reject起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31359974/