diff --git a/async.lua b/async.lua index 1152ad2..97d5cd4 100644 --- a/async.lua +++ b/async.lua @@ -1,6 +1,4 @@ -local err_symbol = {} - local function await(p) assert(coroutine.running(), "running inside a Promise.async() call") local result = nil @@ -18,7 +16,7 @@ local function await(p) while true do if finished then if err then - return coroutine.yield({ err = err, err_symbol = err_symbol }) + return nil, err else return unpack(result) end @@ -42,10 +40,6 @@ function Promise.async(fn) if not cont then -- error in first async() level p:reject(result) - end - if type(result) == "table" and result.err_symbol == err_symbol then - -- error in await() call - p:reject(result.err) return end minetest.after(0, step) diff --git a/async.spec.lua b/async.spec.lua index a621055..9eeee2a 100644 --- a/async.spec.lua +++ b/async.spec.lua @@ -32,25 +32,25 @@ end) mtt.register("Promise.async with handle_async", function() return Promise.async(function(await) - local v = await(Promise.resolved(42)) + local v, err = await(Promise.resolved(42)) assert(v == 42) - v = await(Promise.handle_async(function() return 100 end)) + assert(not err) + v, err = await(Promise.handle_async(function() return 100 end)) assert(v == 100) + assert(not err) end) end) -mtt.register("Promise.async rejected", function(callback) - local p = Promise.async(function(await) - await(Promise.rejected("my-err")) +mtt.register("Promise.async error propagation", function() + return Promise.async(function(await) + local v, err = await(Promise.rejected("my-err")) + assert(not v) + assert(err) end) - p:catch(function(e) - assert(type(e) == "string") - callback() - end) end) -mtt.register("Promise.async error", function(callback) +mtt.register("Promise.async direct error", function(callback) local p = Promise.async(function() error("stuff") end)