Wis*_*hnu 5 javascript angularjs angular-promise
我对Angular JS deferred和$ q感到困惑.我发现这个SO问题解释了$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(),承诺被拒绝并且控制被移动到随后的块的错误函数.
任何帮助是极大的赞赏.提前致谢.
它在您使用时不起作用,deferred.reject因为您没有返回新拒绝的承诺.您可以同时使用两者$q.reject(),deferred.reject()只需在两种情况下都返回一个承诺.
你需要了解这一点
$q.reject() 被拒绝的承诺对象deferred.reject()是不是一个承诺,但在它的一个属性(即,已拒绝许延期对象$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()是一个状态为"被拒绝"的承诺对象.deferred.reject()是不是一个承诺,但拒绝承诺对象内deferred.$promise.用什么?你应该使用$q.reject(),在这种情况下使用虚拟延迟对象是多余的并且被认为是不好的做法,实际上它甚至有一个名称作为延迟反模式.
| 归档时间: | 
 | 
| 查看次数: | 6915 次 | 
| 最近记录: |