An easy way to run reliable polling without messing with setTimeout.
Here is an article explaining why using setInterval is discouraged, especially when dealing with asynchronous tasks.
With bower:
bower install async-pollingThen include the script:
<script src="bower_components/async-polling/dist/async-polling.min.js"></script>
<script>
// Here you can use the AsyncPolling constructor.
</script>With npm:
npm install async-pollingThen require the module:
var AsyncPolling = require('async-polling');Here is the basic usage:
AsyncPolling(function (end) {
// Do whatever you want.
// Then notify the polling when your job is done:
end();
// This will schedule the next call.
}, 3000).run();You can also send a result to the end callback with the usual signature (error, result). Pass null as first argument when everythin is fine:
var polling = AsyncPolling(function (end) {
someAsynchroneProcess(function (error, response) {
if (error) {
// Notify the error:
end(error)
return;
}
// Do something with the result.
// Then send it to the listeners:
end(null, result);
});
}, 3000);
polling.on('error', function (error) {
// The polling encountered an error, handle it here.
});
polling.on('result', function (result) {
// The polling yielded some result, process it here.
});
polling.run(); // Let's start polling.See also the demo script.
var polling = AsyncPolling(pollingFunc, delay);pollingFunc(end): [function] The function to run periodically; takes a callback as parameter to notify the end of the process and possibly send a result. It will be bound to the polling object.delay: [number(ms)|object] the delay between two calls ofpollingFunc. If the type is notnumber, the.valueOf()method of the object will be called to retrieve the amount of milliseconds.
polling.run();polling.stop();Since the polling function is bound to polling, one can call this.stop() from within the polling function:
AsyncPolling(function (end) {
// Do some stuff
// Here I want to stop the polling:
this.stop();
end();
}, 3000).run();polling.on(eventName, listener);eventName: The name of the event for which we register (run,start,error,result,end,schedule,stop).listener: The function to call when the specified event occurs.