[英]javascript auto refresh using setInterval not working
I have some custom javascript code used by sharepoint. 我有一些sharepoint使用的自定义javascript代码。 I need to make part of the page refresh automatically after it loads. 加载后,我需要使页面的一部分自动刷新。 I have tried using setInterval. 我试过使用setInterval。 Here are my functions: 这是我的功能:
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
};
});
The first argument to setTimeout
needs to be the function that will be called. setTimeout
的第一个参数需要是将被调用的函数 。 As written... 如写...
setInterval(census.getCensus(requestUrl).then(onFulfilled, onRejected), 3000);
... census.getCensus(...)
is being called immediately, and the promise returned is being passed to setTimeout
. ... census.getCensus(...)
被立即调用,并且返回的承诺被传递给setTimeout
。
Wrapping it in a function as such should work... 将其包装在这样的功能中应该可以工作...
setInterval(function() { census.getCensus(requestUrl).then(onFulfilled, onRejected) }, 3000);
It's worth mentioning also that using the rejection handler in then
is considered a bad practice; 还值得一提的是,在then
使用拒绝处理程序被认为是一种不好的做法。 it is much better to use .then(onSuccess).catch(onRejected)
. 最好使用.then(onSuccess).catch(onRejected)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.