setTimeout不起作用

时间:2016-03-15 09:10:01

标签: javascript ember.js ember-simple-auth

我正在使用Ember-Simple-Auth对远程服务器验证我的应用程序,该远程服务器为我提供API令牌,必须通过使用续订令牌每30分钟刷新一次。为此,我包含了对ember-Simple-Auth恢复方法的异步调用,该方法实现了令牌刷新,应该使用setTimeout每25分钟触发一次。然而,在对setTimeout的三次调用中,只有一个正常工作,虽然对我来说它们看起来都是一样的。你有没有机会能帮我解决这个问题?

示例代码:

var openSeadragon, selection;
document.addEventListener('DOMContentLoaded', function() {
      openSeadragon = OpenSeadragon({
        id: "openSeadragon1", 
        prefixUrl: "images/",
        tileSources: [],
        sequenceMode: true, 
        showReferenceStrip: true, 
        visibilityRatio: 0.2, 
        constrainDuringPan: true, 
        defaultZoomLevel: 0.8,
        minZoomLevel: 0.3, 
        maxZoomLevel: 10, 
        showNavigator: true, 
        nextButton: "next", 
        previousButton: "previous",
        minZoomImageRatio: 0.1, //of viewer size
        crossOriginPolicy: 'Anonymous',
      });
      selection = openSeadragon.selection({
        onSelection: function(rect) {
          alert(rect + ' Center point: ' + rect.getCenter() + ' Degree rotation: ' + rect.getDegreeRotation());
        }
      });

2 个答案:

答案 0 :(得分:0)

尝试简化您的代码。

试试这个:

var timeOutDelay  = expirates  - current- renewDelay;
setTimeout(restore, timeOutDelay, data); 

答案 1 :(得分:0)

你的 this.restore 在两个回调中可能都会引用错误,导致恢复功能永远不会被调用。您是否尝试过调试所指的内容?使用箭头回调可以解决这个问题,比如

.then((data) => {
    ...
    setTimeout(this.restore, (data.expirates * 1000) - new Date().getTime() - 30000, data);

});