After
var getOverviewMapTimer = $interval(...);
getOverviewMapTimer持有对一个对象的引用(恰好是一个承诺)。
这样做
$interval.cancel(getOverviewMapTimer)会传递(并取消)
getOverviewMapTimer变量引用的对象,但是无法将对象转换为null。该
getOverviewMapTimer变量将继续持有该承诺的对象,并把它设置为null的唯一途径一提的是,通过一个新的任务(即明确地将其设置为空):
var getOverviewMapTimer = $interval(...);...$interval.cancel(getOverviewMapTimer);getOverviewMapTimer = null;
高级主题:
拥有一种简单的方法来确定间隔承诺是否已取消确实听起来不错,例如,向
cancelledpromise对象添加自定义属性,并在取消间隔时将其值设置为true。
Angular非常酷,具有令人难以置信的灵活性和可扩展性,因此使用 Service
Decorator
的概念,我们可以“增强”
$interval服务,扩展其
cancel()方法以添加
cancelled属性,并
true在取消间隔承诺时将其值设置为:
app.config(function ($provide) { $provide.decorator('$interval', function ($delegate) { var originalCancel = $delegate.cancel; $delegate.cancel = function (intervalPromise) { var retValue = originalCancel(intervalPromise); if (retValue && intervalPromise) { intervalPromise.cancelled = true; } return retValue; }; return $delegate; });});
现在,我们可以
$interval像往常一样使用该服务,并且我们始终可以检查间隔承诺的
cancelled属性以了解其是否已取消。
var getOverviewMapTimer = $interval(...);...console.log(!!getOverviewMapTimer.cancelled); // false$interval.cancel(getOverviewMapTimer);console.log(!!getOverviewMapTimer.cancelled); // true
另请参 见此简短演示 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)