我有一个巡回服务,它返回一个解析为tour对象的promise。巡视对象有一些场景,每个场景都有一些热点。在主视图的控制器中,我有一个“私有”_init()
函数,等待游览解析然后设置一些东西。
我正在使用应该在一个接一个地无限地随机播放场景的间隔,但我希望场景之间的延迟基于当前活动场景的热点数量,例如,有2个热点的场景应该持续7.5秒,有1个热点的场景应该持续5秒等等。
这是我到目前为止所拥有的:
var i = 0, ready, scenesCount, activeScene, duration, transition = null;
_init();
// Later on down...
function _init()
{
ready = false;
AlexaTourApi.getTour( null).then( function ( res) {
$log.log( 'AlexaTourController got tour', res);
$scope.tour = res;
scenesCount = $scope.tour.scenes.length;
activeScene = 0;
duration = (getActiveScene().hotspots.length + 1) * 2500;
ready = true;
transition = $timeout( _doTransition(), duration);
});
}
function _doTransition()
{
activeScene = (i++ % scenesCount);
duration = (getActiveScene().hotspots.length + 1) * 2500;
transition = $timeout( _doTransition(), duration);
}
修改
我按照quirimmo的建议实施了一些新代码:
function _init()
{
ready = false;
AlexaTourApi.getTour( null).then( function ( res) {
$log.log( 'AlexaTourController got scenes', res);
$scope.tour = res;
scenesCount = $scope.tour.scenes.length;
activeScene = 0;
duration = (getActiveScene().hotspots.length + 1) * 2500;
ready = true;
_resetInterval();
});
}
function _resetInterval()
{
if ( transition !== null) {
$interval.cancel( transition);
}
duration = (getActiveScene().hotspots.length + 1) * 2500;
transition = $interval( _doTransition(), duration);
}
function _doTransition()
{
activeScene = (i++ % scenesCount);
}
现在我才收到f is not a function
例外。