【问题标题】:Should i use private properties $$state in $q for my needs?我应该在 $q 中使用私有属性 $$state 来满足我的需要吗?
【发布时间】:2016-12-26 18:59:57
【问题描述】:

使用 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!');
   });
}

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

【问题讨论】:

  • 问题不在于如何去做,而在于它是否被认为是一种好的做法。
  • 链接实际上是关于它在灰色区域。一些 Promise 实现通过他们的 API 提供 Promise 检查(包括 Q,$q 的灵感来自)。有些没有。有些人没有,但它仍然可以完成。 $q 属于后者。在某些情况下,promise 检查是可以的,但问题不是其中之一。

标签: javascript angularjs asynchronous q


【解决方案1】:

$$ 名称前缀表示内部使用的私有属性/服务,如有更改,恕不另行通知。

来自the manual

Angular 前缀 $ 和 $$:为了防止与您的代码发生意外的名称冲突,Angular 会在公共对象的名称前加上 $,在私有对象的名称前加上 $$。请不要在代码中使用 $ 或 $$ 前缀

$q 不太可能对$$state 进行重大更改。但是,它的用法表明没有正确使用 Promise。

在这种情况下,它只是

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

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

【讨论】:

    猜你喜欢
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多