diff options
| author | William Boman <william@redwill.se> | 2022-03-23 23:40:04 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-23 23:40:04 +0100 |
| commit | 9dc2cd14952bd1e26e9073428c79b894d280780b (patch) | |
| tree | 3003d35886f5594340a97e06ee692ac315f2948b | |
| parent | run autogen_metadata.lua (diff) | |
| download | mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.gz mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.bz2 mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.lz mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.xz mason-9dc2cd14952bd1e26e9073428c79b894d280780b.tar.zst mason-9dc2cd14952bd1e26e9073428c79b894d280780b.zip | |
feat(async): allow for a.promisify to reject (#557)
| -rw-r--r-- | lua/nvim-lsp-installer/core/async/init.lua | 16 | ||||
| -rw-r--r-- | tests/core/async/async_spec.lua | 12 |
2 files changed, 26 insertions, 2 deletions
diff --git a/lua/nvim-lsp-installer/core/async/init.lua b/lua/nvim-lsp-installer/core/async/init.lua index 85f4c83c..6ecb5a61 100644 --- a/lua/nvim-lsp-installer/core/async/init.lua +++ b/lua/nvim-lsp-installer/core/async/init.lua @@ -37,11 +37,23 @@ local function table_pack(...) return { n = select("#", ...), ... } end -local function promisify(async_fn) +---@param async_fn fun(...) +---@param should_reject_err boolean|nil @Whether the provided async_fn takes a callback with the signature `fun(err, result)` +local function promisify(async_fn, should_reject_err) return function(...) local args = table_pack(...) return await(function(resolve, reject) - args[args.n + 1] = resolve + if should_reject_err then + args[args.n + 1] = function(err, result) + if err then + reject(err) + else + resolve(result) + end + end + else + args[args.n + 1] = resolve + end local ok, err = pcall(async_fn, unpack(args, 1, args.n + 1)) if not ok then reject(err) diff --git a/tests/core/async/async_spec.lua b/tests/core/async/async_spec.lua index 88af14af..662e493a 100644 --- a/tests/core/async/async_spec.lua +++ b/tests/core/async/async_spec.lua @@ -36,6 +36,18 @@ describe("async", function() ) it( + "should reject callback-style functions", + async_test(function() + local err = assert.has_error(function() + a.promisify(function(arg1, cb) + cb(arg1, nil) + end, true) "påskmust" + end) + assert.equals(err, "påskmust") + end) + ) + + it( "should return all values", async_test(function() local val1, val2, val3 = a.wait(function(resolve) |
