2016-08-19 24 views
0

使用angular $ q,我在质疑自己是否应该使用$$ state私有属性来检查承诺的状态(以检查它是未决还是已完成)。

假设这样的情况:

var promise = undefined; 
$scope.click = function(){ 
    if(promise != null && promise.$$state.status === 0) 
     return; 

    promise = doAsyncAnimation().then(function(){ 
     console.log('hey, i'm done!'); 
    }); 
} 

它被认为是不好的做法?它会完全符合我的需求,而且我不喜欢使用单独的布尔变量来完成工作。 它有多少资格?

+0

http://stackoverflow.com/questions/24091513/get-state-of-angular-deferred – mindparse

+0

它不是问题*如何*做到这一点,但如果它被认为是一种好的做法。 – Luxor001

+0

链接实际上是在灰色地带。一些承诺实现通过他们的API提供承诺检查(包括Q,这是$ q的灵感来源)。有些不。有些不这样做,但它仍然可以完成。 $ q属于后者。在某些情况下,承诺检查可以,但问题不在于其中之一。 – estus

回答

2

$$名称前缀指定一个在内部使用的私有财产/服务,如有更改,恕不另行通知。

the manual

角前缀$和$$:为了防止意外的名称冲突与您的代码,以$公共对象,并与$$私有对象名称的前缀角度名字。请不要在您的代码中使用$或$$前缀

$q不可能向$$state引入中断更改。但是,它的使用表明承诺没有正确使用。

在这种情况下,它仅仅是

$scope.click = function(){ 
    if (promise) 
     return; 

    promise = doAsyncAnimation().then(function(){ 
     console.log('hey, i\'m done!'); 
    }) 
    .finally(function() { 
     promise = null; 
    }); 
} 
相关问题