| "use strict"; |
| Object.defineProperty(exports, "__esModule", { value: true }); |
| var Observable_1 = require("../Observable"); |
| var async_1 = require("../scheduler/async"); |
| var isNumeric_1 = require("../util/isNumeric"); |
| var isScheduler_1 = require("../util/isScheduler"); |
| function timer(dueTime, periodOrScheduler, scheduler) { |
| if (dueTime === void 0) { dueTime = 0; } |
| var period = -1; |
| if (isNumeric_1.isNumeric(periodOrScheduler)) { |
| period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler); |
| } |
| else if (isScheduler_1.isScheduler(periodOrScheduler)) { |
| scheduler = periodOrScheduler; |
| } |
| if (!isScheduler_1.isScheduler(scheduler)) { |
| scheduler = async_1.async; |
| } |
| return new Observable_1.Observable(function (subscriber) { |
| var due = isNumeric_1.isNumeric(dueTime) |
| ? dueTime |
| : (+dueTime - scheduler.now()); |
| return scheduler.schedule(dispatch, due, { |
| index: 0, period: period, subscriber: subscriber |
| }); |
| }); |
| } |
| exports.timer = timer; |
| function dispatch(state) { |
| var index = state.index, period = state.period, subscriber = state.subscriber; |
| subscriber.next(index); |
| if (subscriber.closed) { |
| return; |
| } |
| else if (period === -1) { |
| return subscriber.complete(); |
| } |
| state.index = index + 1; |
| this.schedule(state, period); |
| } |
| //# sourceMappingURL=timer.js.map |