2017-12-07 26 views
1

私はSharepointで使用されているカスタムJavaScriptコードを持っています。ロード後、ページの更新を自動的に行う必要があります。私は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)を使用する方がはるかに優れています。

関連する問題