簡體   English   中英

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);   
    });

為了使其他小部件能夠接收taskCompleted標志並進行相應的更新,我們必須使用具有5秒延遲的setTimeout。 如果沒有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從服務器更新為true時,將發送廣播。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM