2017-12-07 30 views
1

sharepoint에서 사용하는 맞춤 자바 스크립트 코드가 있습니다. 페이지가 새로 고쳐지면 자동으로 새로 고침해야합니다. 나는 setInterval을 사용하여 시도했다. 여기 내 기능은 다음과 같습니다javascript 자동 새로 고치기 setInterval이 작동하지 않음

define([ 
    'jquery', 
    'knockout', 
    'text!./home-page-census.html', 
    'q', 
    'underscore', 
    'census', 
    'moment', 
    'sp_core', 
    'bootstrap', 
    '!domReady' 
], function ($, ko, htmlString, Q, _, census, moment) { 
    var baseUrl = _spPageContextInfo.siteAbsoluteUrl; 

    function buildRequestUrl() { 
     var requestUrl = baseUrl + "/_api/web/lists/GetByTitle('Census')/items?"; 
     var oDataSelect = "$select=Title,CensusBranch,BedAvailabilityPercentage,Modified,StatusBarColor,DisplayText,Tooltip"; 

     return requestUrl += oDataSelect; 
    } 

    function getUpdatedCensus() { 
     return Q.Promise(function (resolve, reject, notify) { 
      requestUrl = buildRequestUrl(); 
      census.getCensus(requestUrl).then(onFulfilled, onRejected); 
      //setInterval(census.getCensus(requestUrl).then(onFulfilled, onRejected), 3000); 

      function onFulfilled(censusResult) { 
       resolve(censusResult); 
      } 

      function onRejected(reason) { 
       reject(reason); 
      } 
     }); 
    } 

    function initViewModel(viewModel) { 
     getUpdatedCensus().then(onFulfilled, onRejected); 

     function onFulfilled(result) { 
      viewModel.censusByBranch(result); 
      viewModel.isInitializing(false); 
     } 

     function onRejected(reason) { 
      console.log(reason.message); 
      console.log(reason.stack); 
      viewModel.isInitializing(false); 
     } 
    } 

    function HomePageCensusViewModel(params) { 
     var self = this; 
     self.isInitializing = ko.observable(true); 
     self.censusByBranch = ko.observable(); 

     initViewModel(self); 
    } 

    ko.bindingHandlers.censusLastUpdatedTime = { 
     update: function (element, valueAccessor, allBindings, viewModel, bindingContext) { 
      var value = valueAccessor(); 
      var lastUpdated = ko.unwrap(value); 

      $(element).text(lastUpdated.format('M[/]DD [@] h[:]mmA')); 
     } 
    } 

    return { 
     viewModel: HomePageCensusViewModel, 
     template: htmlString 
    }; 
}); 

답변

0

setTimeout에 첫 번째 인수는 호출 될 기능 할 필요가있다. 기록으로 ...

setInterval(census.getCensus(requestUrl).then(onFulfilled, onRejected), 3000); 

은 ... census.getCensus(...) 즉시 호출되고, 반환 약속은 setTimeout에 전달되고있다.

... 작동합니다 같은 기능에 포장

setInterval(function() { census.getCensus(requestUrl).then(onFulfilled, onRejected) }, 3000); 

그것은 then에서 거부 핸들러를 사용하는 것이 나쁜 관행으로 간주하는 것도 언급 할 가치가있다; .then(onSuccess).catch(onRejected)을 사용하는 것이 훨씬 낫습니다.