ServiceNow:recordWatch 和 $rootscope 计时问题
ServiceNow: issue with recordWatch and $rootscope timing
我们的团队正在 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 秒的延迟,recordWatch 工作得太快,其他小部件根本不会更新。有没有办法让这些事情变得更顺利?我们目前的方式可行...但用户体验很糟糕。
欢迎提出任何建议。谢谢!
这里的根本问题是 spUtil.update($scope);
是异步的,$broadcast 将在服务器加载所有任务之前发生。
您需要做的是在服务器逻辑完成后发送 $broadcast。
我建议你在客户端观看 data.tasksCompleted 并将广播放在回调中:
$scope.$watch(data.tasksCompleted, , function(value) {
if (value)
$rootScope.$broadcast('onboardingCompletedTasks', $scope.data.tasksCompleted);
});
这样,当 data.tasksCompleted 从服务器更新为真时,将发送广播。
我们的团队正在 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 秒的延迟,recordWatch 工作得太快,其他小部件根本不会更新。有没有办法让这些事情变得更顺利?我们目前的方式可行...但用户体验很糟糕。
欢迎提出任何建议。谢谢!
这里的根本问题是 spUtil.update($scope);
是异步的,$broadcast 将在服务器加载所有任务之前发生。
您需要做的是在服务器逻辑完成后发送 $broadcast。
我建议你在客户端观看 data.tasksCompleted 并将广播放在回调中:
$scope.$watch(data.tasksCompleted, , function(value) {
if (value)
$rootScope.$broadcast('onboardingCompletedTasks', $scope.data.tasksCompleted);
});
这样,当 data.tasksCompleted 从服务器更新为真时,将发送广播。