refactor(error): pop xpcall stack obviously

This commit is contained in:
kevinhwang91 2024-08-05 07:15:01 +08:00
parent 038d05664f
commit 407880a65e
2 changed files with 14 additions and 4 deletions

View file

@ -66,8 +66,9 @@ end
---@param startLevel? number
---@param skipShortSrc? string
---@param doPop? boolean
---@return PromiseAsyncError
function Error:buildStack(startLevel, skipShortSrc)
function Error:buildStack(startLevel, skipShortSrc, doPop)
local level = startLevel or 1
local value
local thread = coroutine.running()
@ -80,7 +81,9 @@ function Error:buildStack(startLevel, skipShortSrc)
level = level + 1
self:push(value)
end
table.remove(self.queue)
if doPop then
self:pop()
end
return self
end
@ -130,6 +133,11 @@ function Error:push(value)
return #self.queue
end
---@return string
function Error:pop()
return table.remove(self.queue)
end
---@return any
function Error:peek()
return self.err

View file

@ -123,8 +123,9 @@ local function handleQueue(promise)
return func(result)
end, function(errmsg)
if type(errmsg) == 'string' then
-- pop xpcall stack
newPromise.err = errFactory:new(errmsg)
:buildStack(3, shortSrc)
:buildStack(3, shortSrc, true)
return tostring(newPromise.err)
end
return errmsg
@ -180,8 +181,9 @@ local function wrapExecutor(promise, executor, self)
end
end, function(errmsg)
if type(errmsg) == 'string' then
-- pop xpcall stack
promise.err = errFactory:new(errmsg)
:buildStack(3, shortSrc)
:buildStack(3, shortSrc, true)
return tostring(promise.err)
end
return errmsg