@@ -22,7 +22,7 @@ local REJECTED = 3
2222--- @field err ? PromiseAsyncError
2323local Promise = setmetatable ({_id = promiseId }, {
2424 __call = function (self , executor )
25- return self . new (executor )
25+ return self : new (executor )
2626 end
2727})
2828Promise .__index = Promise
@@ -241,11 +241,9 @@ resolvePromise = function(promise, value)
241241 end
242242end
243243
244- function Promise . new (executor )
244+ function Promise : new (executor )
245245 utils .assertType (executor , ' function' )
246- --- @type Promise
247- local o = setmetatable ({}, Promise )
248-
246+ local o = self == Promise and setmetatable ({}, self ) or self
249247 o .state = PENDING
250248 o .result = nil
251249 o .queue = {}
@@ -258,7 +256,7 @@ function Promise.new(executor)
258256end
259257
260258function Promise :thenCall (onFulfilled , onRejected )
261- local o = Promise .new (noop )
259+ local o = self .new (Promise , noop )
262260 table.insert (self .queue , {o , onFulfilled , onRejected })
263261 if self .state ~= PENDING then
264262 handleQueue (self )
@@ -292,7 +290,7 @@ function Promise.resolve(value)
292290 if Promise .isInstance (value , typ ) then
293291 return value
294292 else
295- local o = Promise . new (noop )
293+ local o = Promise : new (noop )
296294 local thenCall = getThenable (value , typ )
297295 if thenCall then
298296 wrapExecutor (o , thenCall , value )
@@ -305,7 +303,7 @@ function Promise.resolve(value)
305303end
306304
307305function Promise .reject (reason )
308- local o = Promise . new (noop )
306+ local o = Promise : new (noop )
309307 o .state = REJECTED
310308 o .result = reason
311309 handleRejection (o )
314312
315313function Promise .all (values )
316314 utils .assertType (values , ' table' )
317- return Promise . new (function (resolve , reject )
315+ return Promise : new (function (resolve , reject )
318316 local res = {}
319317 local cnt = 0
320318 for k , v in pairs (values ) do
337335
338336function Promise .allSettled (values )
339337 utils .assertType (values , ' table' )
340- return Promise . new (function (resolve , reject )
338+ return Promise : new (function (resolve , reject )
341339 local res = {}
342340 local cnt = 0
343341 local _ = reject
362360
363361function Promise .any (values )
364362 utils .assertType (values , ' table' )
365- return Promise . new (function (resolve , reject )
363+ return Promise : new (function (resolve , reject )
366364 local cnt = 0
367365 local function rejectAggregateError ()
368366 if cnt == 0 then
386384
387385function Promise .race (values )
388386 utils .assertType (values , ' table' )
389- return Promise . new (function (resolve , reject )
387+ return Promise : new (function (resolve , reject )
390388 for _ , p in pairs (values ) do
391389 Promise .resolve (p ):thenCall (function (value )
392390 resolve (value )
0 commit comments