我是Angular(和JS)的新手,只是有些困惑。
我用以下命令启动计时器:
var getOverviewMapTimer = $interval($scope.UpdateOverviewMap, UPDATE_FREQUENCY);
据我了解,这getOverviewMapTimer
是一个“承诺”。
我希望能够检查是否计时器正在运行和已经例外,如果我曾经
$interval.cancel(getOverviewMapTimer);
那么getOverviewMapTimer
会null
,我可以检查那个。
似乎并非如此。
我是否必须显式销毁诺言(对计时器已取消的诺言是什么?)。如果是这样,我将如何&然后必须将其显式设置为null
?
我 认为
我应该使用cancel(getOverviewMapTimer);
,但不能100%地确定,因为getOverviewMapTimer
之后还是非空的。
谢谢你的帮助
After var getOverviewMapTimer = $interval(...);
getOverviewMapTimer
持有对一个对象的引用(恰好是一个承诺)。
这样做$interval.cancel(getOverviewMapTimer)
会传递(并取消)getOverviewMapTimer
变量引用的对象,但是无法将对象转换为null。该getOverviewMapTimer
变量将继续持有该承诺的对象,并把它设置为null的唯一途径一提的是,通过一个新的任务(即明确地将其设置为空):
var getOverviewMapTimer = $interval(...);
...
$interval.cancel(getOverviewMapTimer);
getOverviewMapTimer = null;
高级主题:
拥有一种简单的方法来确定间隔承诺是否已取消确实听起来不错,例如,向cancelled
promise对象添加自定义属性,并在取消间隔时将其值设置为true。
Angular非常酷,具有令人难以置信的灵活性和可扩展性,因此使用 Service
Decorator
的概念,我们可以“增强”
$interval
服务,扩展其cancel()
方法以添加cancelled
属性,并true
在取消间隔承诺时将其值设置为:
/* Service Decorators can be configured in `config` blocks */
app.config(function ($provide) {
/* Register a decorator for the `$interval` service */
$provide.decorator('$interval', function ($delegate) {
/* Keep a reference to the original `cancel()` method */
var originalCancel = $delegate.cancel;
/* Define a new `cancel()` method */
$delegate.cancel = function (intervalPromise) {
/* First, call the original `cancel()` method */
var retValue = originalCancel(intervalPromise);
/* If the promise has been successfully cancelled,
* add a `cancelled` property (with value `true`) */
if (retValue && intervalPromise) {
intervalPromise.cancelled = true;
}
/* Return the value returned by the original method */
return retValue;
};
/* Return the original (but "augmented") service */
return $delegate;
});
});
现在,我们可以$interval
像往常一样使用该服务,并且我们始终可以检查间隔承诺的cancelled
属性以了解其是否已取消。
var getOverviewMapTimer = $interval(...);
...
console.log(!!getOverviewMapTimer.cancelled); // false
$interval.cancel(getOverviewMapTimer);
console.log(!!getOverviewMapTimer.cancelled); // true
另请参 见此简短演示 。
我有一个小的angularjs应用程序,它在其中一个控制器中使用angularjs资源。下面是资源使用的代码 当页面第一次加载时,一切都很好,我得到了我需要的所有数据。但当我提出第二个请求时(例如,按下页面上调用getFilteredTask(filter)函数的按钮)。我有一个结果。状态=-1。根据Fiddler和Chrome在开发工具中的网络选项卡,请求状态为200,但已被取消。我也检查了后端
我相信字段选择器可能有一个bug,但只是想知道是否有任何修复或解决方案的细节。
问题内容: 为什么没有java.util.Timer对象的方法? 如果计时器尚未取消,我想安排一个任务,如果取消了计时器,请直接运行它(在同一线程上)。 如果计时器已被取消,捕获该错误的唯一选择是吗?(赶上感觉不对)。 问题答案: 您如何确定要使用?改为使用,它具有很多其他好处,也可以启动。从Java 5开始,一般建议是将s 替换为s。 有一个专门用于计划执行程序服务的界面。使用其中一种方法实例化
感谢任何能帮助你回答问题的人。
问题内容: 假设我要执行以下命令: 为了避免NullPointerException,如果发生以下情况,我将必须执行以下操作: 有没有一种方法或已经存在的Utils类可以更优雅地做到这一点,让我们说以下类似的东西? 问题答案: 最好的方法是 避免 连锁。如果您不熟悉Demeter法则(LoD),我认为应该这样做。您已经给出了一个完美的消息链示例,该消息链与没有业务知识的类过于亲密。 得墨meter
我正在制作一个BMR计算器,我的一个面板为用户提供了一个选项,可以改变他们输入身高的方式,从厘米到英尺/英寸。 下面是处理上述面板的代码块。 我的问题是,当我按下kg或cm按钮时,文本字段不会出现,因此我认为我使用的isSelected()有点错误。 下面是一幅关于这种情况的图像。您可以看到,即使选择了脚,也不会显示任何文本字段。我能做些什么来解决这个问题?