[英]AngularJS deferred.reject not working but $q.reject working
我对Angular JS deferred和$ q感到困惑。 我发现这个SO问题解释了$q.defer()
和$q
之间的区别。它解释说
$ q.reject是创建延迟的快捷方式,然后立即拒绝它
所以$q.reject()
必须等于
var deferred = $q.defer(); deferred.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');
})
这不起作用,但是当我用$q.reject()
替换deferred.reject
时,promise被拒绝,控件被移动到随后的块的error函数。
任何帮助是极大的赞赏。 提前致谢。
使用deferred.reject
时它不起作用,因为您没有返回新拒绝的promise。 您可以使用$q.reject()
和deferred.reject()
,只需要在两种情况下都返回一个promise。
你需要了解这一点
$q.reject()
被拒绝的promise对象 deferred.reject()
不是一个promise,而是一个在其中一个属性中拒绝promise的延迟对象(即$promise
)。 所以你可以返回任何对象或值,它将成为一个新的promise对象,并将被传递给下一个链中的块。 但是,当您return deferred.reject()
将作为只是一些传递的对象(一个更多的时间,这不是一个承诺,但它有一个承诺内 )和未来的承诺将得到的当然成功地解决。
如果您返回相应的承诺,它也将与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()
,在这种情况下使用虚拟延迟对象是多余的并且被认为是不好的做法,实际上它甚至有一个名称作为延迟反模式 。
确保你回复了一个承诺。
function getData() {
var deferred = $q.defer();
myService.getData()
.then(function (response) {
deferred.resolve('Just received a notification');
}).catch(function (err) {
deferred.reject(err);
};
return deferred.promise;
}
getData().then(function (response) {
console.log('done');
}, function (response) {
console.log('rejected');
});
这与Q( https://github.com/kriskowal/q )一起使用
var def = Q.defer();
def.promise
.then(
function(ok){
return ok;
},
function(err){
var d = Q.defer();
d.reject(err);
return d.promise;
}
)
.then(
function(ok){
console.log('ok',ok);
},
function(err){
console.log('err',err);
}
);
def.reject('error');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.