2015-02-03 32 views
6

Ember'ın Kor uygulamasıdır ne kod testler için avantajları vardır çalıştırmak döngü, ilave olur çünkü geliştiricilerin kullandıkları önerilir setTimeout müteakip uygulamalarına sahiptir.setInterval ve clearInterval

  Ember.run.later((function() { 
       console.log("will run once after 1000"); 
      }), 1000); 

dolaylı olarak benzer bir Kor setInterval için yedek ve var mı (a setInterval iptal etmek için kullanılır) clearInterval? Ben someFunc her 1000 ms

this.intervalId = setInterval(this.someFunc.bind(this), 1000); 

cevap

8

herhangi eşdeğer farkında değilim çalıştırmak gerekiyor ama özelliğe sahip böyle bir kodu kullanın: Sonra

var Poller = Ember.Object.extend({ 

    _interval: 1000, 
    _currentlyExecutedFunction: null, 

    start: function(context, pollingFunction) { 
    this.set('_currentlyExecutedFunction', this._schedule(context, pollingFunction, [].slice.call(arguments, 2))); 
    }, 

    stop: function() { 
    Ember.run.cancel(this.get('_currentlyExecutedFunction')); 
    }, 

    _schedule: function(context, func, args) { 
    return Ember.run.later(this, function() { 
     this.set('_currentlyExecutedFunction', this._schedule(context, func, args)); 
     func.apply(context, args); 
    }, this.get('_interval')); 
    }, 

    setInterval: function(interval) { 
    this.set('_interval', interval); 
    } 

}); 

export 
default Poller; 

, İskele babası örneğini: var poller = Poller.create() ve daha sonra poller.start() ve poller.stop() + ile oynayabilirsiniz + aralığı poller.setInterval(interval) üzerinden ayarlayın. Bu yardımcı olur

_updateRunningReport: function(report) { 
    var poller = new Poller(); 
    poller.setInterval(this.POLLING_INTERVAL); 
    poller.start(this, function() { 
    if (report.isRunning()) { 
     this._reloadReport(report); 
    } else { 
     poller.stop(); 
    } 
    }); 
    eventBus.onLogout(function() { 
    poller.stop(); 
    }); 
}, 

Umut ...

+0

Bu güzel kodudur. Teşekkür ederim. Sadece doğru şekilde kullandığımdan emin olmak için, cevabınızı (tam olarak yazdığınız gibi) dosyama yapıştırdım, bir örnek oluşturdum ve sonra (buna yardıma ihtiyacım var) bunu “bu” dan geçen bir denetleyiciden aradım. bağlam olarak, bu gibi: 'poller.start (this, bu.queryFunction); 'Bunu nasıl kullandın mı?' – Leahcim

+0

Yani, bunu nasıl kullandınız, onu bir denetleyiciden mi arıyorum? – Leahcim

+0

evet, bu, başlangıçta benim, sadece açık :) – andrusieczko

0

Diğer bir seçenek ember-poll ekleme ile kullanmaktır: Benim kod

, ben az çok bu şekilde (yoklama raporları her 10 saniye) yaptığı üzerinde. Dahili olarak, @andrusieczko Poller nesnesiyle aynıdır (her ikisi de Ember Run Loop'u dikkate alır). Ember geliştirici görünümünden, poll hizmetine erişebilirsiniz. npm install ember-poll --save-dev:

Sadece eklentiyi yükleyin.


Örnek:

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    poll: Ember.service.inject(), 

    setupController() { 
    this._super(...arguments); 

    this.get('poll').addPoll({ 
     interval: 1000, 
     label: 'my-poll', 
     callback:() => { 
     //do something every second 
     } 
    }); 
    }, 

    actions: { 
    willTransition() { 
     this.get('poll').clearPollByLabel('my-poll'); 
    } 
    } 
} 
İlgili konular