33 lines
757 B
CoffeeScript
33 lines
757 B
CoffeeScript
|
# This is always fulfilled.
|
||
|
winLater = (val, ms) ->
|
||
|
new Promise (resolve) -> setTimeout (-> resolve val), ms
|
||
|
|
||
|
# This is always rejected.
|
||
|
failLater = (val, ms) ->
|
||
|
new Promise (resolve, reject) -> setTimeout (-> reject new Error val), ms
|
||
|
|
||
|
createAsyncIterable = (syncIterable) ->
|
||
|
for elem in syncIterable
|
||
|
yield await winLater elem, 50
|
||
|
|
||
|
test "async iteration", ->
|
||
|
foo = (x for await x from createAsyncIterable [1,2,3])
|
||
|
arrayEq foo, [1, 2, 3]
|
||
|
|
||
|
test "async generator functions", ->
|
||
|
foo = (val) ->
|
||
|
yield await winLater val + 1, 50
|
||
|
|
||
|
bar = (val) ->
|
||
|
yield await failLater val - 1, 50
|
||
|
|
||
|
a = await foo(41).next()
|
||
|
eq a.value, 42
|
||
|
|
||
|
try
|
||
|
b = do -> await bar(41).next()
|
||
|
b.catch (err) ->
|
||
|
eq "40", err.message
|
||
|
catch err
|
||
|
ok no
|