delay.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /*
  2. * Provides time-based promise-returning delay and schedule functions
  3. */
  4. ({define:typeof define!="undefined"?define:function(factory){module.exports=factory(require)}}).
  5. define(function(require){
  6. if (typeof system === "object" && system.engine === "rhino"){
  7. // for rhino
  8. return require("./engines/rhino/delay");
  9. }
  10. var defer = require("./promise").defer,
  11. LazyArray = require("./lazy-array").LazyArray;
  12. // returns a promise that is fulfilled after the given number of milliseconds
  13. function delay(ms){
  14. var deferred = defer();
  15. setTimeout(deferred.resolve, ms);
  16. return deferred.promise;
  17. };
  18. // returns a lazy array that iterates one every given number of milliseconds
  19. delay.schedule = function(ms){
  20. var callbacks = [];
  21. setInterval(function(){
  22. callbacks.forEach(function(callback){
  23. if(callback()){
  24. callbacks.splice(callbacks.indexOf(callback), 1);
  25. }
  26. });
  27. }, ms);
  28. return LazyArray({
  29. some: function(callback){
  30. callbacks.push(callback);
  31. }
  32. });
  33. };
  34. return delay.delay = delay;
  35. });