Implements or and and for futures. Ref #1487.
This commit is contained in:
parent
9c0d25dc94
commit
a0b2fb5bd7
1 changed files with 21 additions and 0 deletions
|
|
@ -180,6 +180,27 @@ proc asyncCheck*[T](future: PFuture[T]) =
|
||||||
echoOriginalStackTrace(future)
|
echoOriginalStackTrace(future)
|
||||||
raise future.error
|
raise future.error
|
||||||
|
|
||||||
|
proc `and`*[T, Y](fut1: PFuture[T], fut2: PFuture[Y]): PFuture[void] =
|
||||||
|
## Returns a future which will complete once both ``fut1`` and ``fut2``
|
||||||
|
## complete.
|
||||||
|
var retFuture = newFuture[void]()
|
||||||
|
fut1.callback =
|
||||||
|
proc () =
|
||||||
|
if fut2.finished: retFuture.complete()
|
||||||
|
fut2.callback =
|
||||||
|
proc () =
|
||||||
|
if fut1.finished: retFuture.complete()
|
||||||
|
return retFuture
|
||||||
|
|
||||||
|
proc `or`*[T, Y](fut1: PFuture[T], fut2: PFuture[Y]): PFuture[void] =
|
||||||
|
## Returns a future which will complete once either ``fut1`` or ``fut2``
|
||||||
|
## complete.
|
||||||
|
var retFuture = newFuture[void]()
|
||||||
|
proc cb() =
|
||||||
|
if not retFuture.finished: retFuture.complete()
|
||||||
|
fut1.callback = cb
|
||||||
|
fut2.callback = cb
|
||||||
|
|
||||||
type
|
type
|
||||||
PDispatcherBase = ref object of PObject
|
PDispatcherBase = ref object of PObject
|
||||||
timers: seq[tuple[finishAt: float, fut: PFuture[void]]]
|
timers: seq[tuple[finishAt: float, fut: PFuture[void]]]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue