Merge pull request #22 from ddavness/promise-is-pcall

Use pcall() on Promise.is when looking for the .andThen function
This commit is contained in:
eryn L. K 2020-05-04 15:27:12 -04:00 committed by GitHub
commit 2e63e8b7cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -471,7 +471,20 @@ function Promise.is(object)
return false
end
return type(object.andThen) == "function"
local objectMetatable = getmetatable(object)
if objectMetatable == Promise then
-- The Promise came from this library.
return true
elseif objectMetatable == nil then
-- No metatable, but we should still chain onto tables with andThen methods
return type(object.andThen) == "function"
elseif type(objectMetatable) == "table" and type(rawget(objectMetatable, "andThen")) == "function" then
-- Maybe this came from a different or older Promise library.
return true
end
return false
end
--[[