|
@@ -1764,6 +1764,31 @@ function CooperativeScheduler:isEmpty()
|
|
|
return not next(self.tasks)
|
|
|
end
|
|
|
|
|
|
+--- @class TimeoutScheduler
|
|
|
+-- @description A scheduler that uses luvit's timer library to schedule events on an event loop.
|
|
|
+local TimeoutScheduler = {}
|
|
|
+TimeoutScheduler.__index = TimeoutScheduler
|
|
|
+TimeoutScheduler.__tostring = util.constant('TimeoutScheduler')
|
|
|
+
|
|
|
+--- Creates a new TimeoutScheduler.
|
|
|
+-- @returns {TimeoutScheduler}
|
|
|
+function TimeoutScheduler.create()
|
|
|
+ return setmetatable({}, TimeoutScheduler)
|
|
|
+end
|
|
|
+
|
|
|
+--- Schedules an action to run at a future point in time.
|
|
|
+-- @arg {function} action - The action to run.
|
|
|
+-- @arg {number=0} delay - The delay, in milliseconds.
|
|
|
+-- @returns {Subscription}
|
|
|
+function TimeoutScheduler:schedule(action, delay)
|
|
|
+ local timer = require 'timer'
|
|
|
+ local subscription
|
|
|
+ local handle = timer.setTimeout(delay, action)
|
|
|
+ return Subscription.create(function()
|
|
|
+ timer.clearTimeout(handle)
|
|
|
+ end)
|
|
|
+end
|
|
|
+
|
|
|
--- @class Subject
|
|
|
-- @description Subjects function both as an Observer and as an Observable. Subjects inherit all
|
|
|
-- Observable functions, including subscribe. Values can also be pushed to the Subject, which will
|
|
@@ -2073,6 +2098,7 @@ return {
|
|
|
Observable = Observable,
|
|
|
ImmediateScheduler = ImmediateScheduler,
|
|
|
CooperativeScheduler = CooperativeScheduler,
|
|
|
+ TimeoutScheduler = TimeoutScheduler,
|
|
|
Subject = Subject,
|
|
|
AsyncSubject = AsyncSubject,
|
|
|
BehaviorSubject = BehaviorSubject,
|