ServiceNow:记录监视和$rootscope计时的问题



我们的团队正在 ServiceNow 中开发一个应用程序。 我们在一个小部件上有一个动态更新的 recordWatch,但我们也希望使用 rootscope 将数据广播到另一个小部件,并更新其他内容。 我们遇到的问题是$rootscope延迟,我们不确定如何缓解它。

我们的服务器脚本如下所示:

data.tasksCompleted = false;
    if (input && input.action === 'getTasks')
        getTasks(data.user_id);
    function getTasks(userId) {
        data.tasks = new sn_hr_core.hr_Task().getMyTasks(data.user_id);
        for (var i = data.tasks.length-1; i >= 0; i--) {
            var task = new sn_hr_sp.hr_TaskTicket().getTasks(data.tasks[i].sys_id, 'sn_hr_core_task');
            data.tasks[i].taskInfo = task;
            if(data.tasks[i].state == '3'){
                data.tasksCompleted=true;
            }
        }
    }

带有 recordWatch 的客户端脚本如下所示:

spUtil.recordWatch($scope, 'sn_hr_core_task', '',function(event,data){
        spUtil.update($scope);
        setTimeout(function(){ 
            $rootScope.$broadcast('onboardingCompletedTasks', $scope.data.tasksCompleted);  
        }, 5000);   
    });

我们必须使用具有 5 秒延迟的 setTimeout,以便其他小部件接收 tasksCompleted 标志并相应地更新。 如果没有 5 秒的延迟,记录手表的工作速度太快,另一个小部件根本不会更新。 有没有办法让这些事情更顺畅? 我们目前的方式有效...但是用户体验很糟糕。

欢迎任何建议。 谢谢!

这里的根本问题是spUtil.update($scope);是异步的,$broadcast将在服务器加载所有任务之前发生。

您需要做的是在服务器逻辑完成后发送$broadcast。

我建议你在客户端上观看data.tasksComplete,并将广播放在回调中:

 $scope.$watch(data.tasksCompleted, , function(value) {
    if (value)
    $rootScope.$broadcast('onboardingCompletedTasks', $scope.data.tasksCompleted);
  }); 

这样,当 data.tasksFinished 从服务器更新为 true 时,将发送广播。

最新更新