mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-30 18:02:05 +00:00
* wip; fixes #22210; transform return future in try/finally properly * add a test case for #22210 * minor * inserts a needsCompletion flag * uses copyNimNode
41 lines
730 B
Nim
41 lines
730 B
Nim
discard """
|
|
output: '''
|
|
stage 1
|
|
stage 2
|
|
stage 3
|
|
(status: 200, data: "SOMEDATA")
|
|
'''
|
|
"""
|
|
|
|
import std/asyncdispatch
|
|
|
|
|
|
# bug #22210
|
|
type
|
|
ClientResponse = object
|
|
status*: int
|
|
data*: string
|
|
|
|
proc subFoo1(): Future[int] {.async.} =
|
|
await sleepAsync(100)
|
|
return 200
|
|
|
|
proc subFoo2(): Future[string] {.async.} =
|
|
await sleepAsync(100)
|
|
return "SOMEDATA"
|
|
|
|
proc testFoo(): Future[ClientResponse] {.async.} =
|
|
try:
|
|
let status = await subFoo1()
|
|
doAssert(status == 200)
|
|
let data = await subFoo2()
|
|
return ClientResponse(status: status, data: data)
|
|
finally:
|
|
echo "stage 1"
|
|
await sleepAsync(100)
|
|
echo "stage 2"
|
|
await sleepAsync(200)
|
|
echo "stage 3"
|
|
|
|
when isMainModule:
|
|
echo waitFor testFoo() |