diff --git a/ethers/providers/jsonrpc/looping.nim b/ethers/providers/jsonrpc/looping.nim new file mode 100644 index 0000000..f0bb7a8 --- /dev/null +++ b/ethers/providers/jsonrpc/looping.nim @@ -0,0 +1,6 @@ +template untilCancelled*(body) = + try: + while true: + body + except CancelledError: + raise diff --git a/ethers/providers/jsonrpc/subscriptions.nim b/ethers/providers/jsonrpc/subscriptions.nim index e24ead5..c0e92c2 100644 --- a/ethers/providers/jsonrpc/subscriptions.nim +++ b/ethers/providers/jsonrpc/subscriptions.nim @@ -6,6 +6,7 @@ import ../../basics import ../../provider import ./rpccalls import ./conversions +import ./looping type JsonRpcSubscriptions* = ref object of RootObj @@ -110,13 +111,10 @@ proc new*(_: type JsonRpcSubscriptions, callback(id, change) proc poll {.async.} = - try: - while true: - for id in toSeq subscriptions.callbacks.keys: - await poll(id) - await sleepAsync(pollingInterval) - except CancelledError: - raise + untilCancelled: + for id in toSeq subscriptions.callbacks.keys: + await poll(id) + await sleepAsync(pollingInterval) asyncSpawn poll()