You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.1 KiB
37 lines
1.1 KiB
import { Observable } from '../Observable'; |
|
import { async } from '../scheduler/async'; |
|
import { isNumeric } from '../util/isNumeric'; |
|
import { isScheduler } from '../util/isScheduler'; |
|
export function timer(dueTime = 0, periodOrScheduler, scheduler) { |
|
let period = -1; |
|
if (isNumeric(periodOrScheduler)) { |
|
period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler); |
|
} |
|
else if (isScheduler(periodOrScheduler)) { |
|
scheduler = periodOrScheduler; |
|
} |
|
if (!isScheduler(scheduler)) { |
|
scheduler = async; |
|
} |
|
return new Observable(subscriber => { |
|
const due = isNumeric(dueTime) |
|
? dueTime |
|
: (+dueTime - scheduler.now()); |
|
return scheduler.schedule(dispatch, due, { |
|
index: 0, period, subscriber |
|
}); |
|
}); |
|
} |
|
function dispatch(state) { |
|
const { index, period, subscriber } = state; |
|
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
|