Наша команда разрабатывает приложение в ServiceNow. У нас есть запись записи на виджете, которая обновляется динамически, но мы также хотим использовать rootcope для трансляции данных на другой виджет, а также для обновления чего-то еще. Проблема, с которой мы сталкиваемся, - это задержка в $ rootcope, и мы не уверены, как ее уменьшить.
Наш серверный скрипт выглядит так:
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);
});
Нам пришлось использовать setTimeout с 5-секундной задержкой, чтобы другой виджет получил флаг tasksCompleted и соответственно обновился. Без 5-секундной задержки recordWatch работает слишком быстро, а другой виджет вообще не обновляется. Есть ли способ сделать эти вещи более гладкими? Наш текущий способ работает ... но пользовательский опыт ужасен.
Любые предложения приветствуются. Спасибо!