@@ -22,7 +22,7 @@ local REJECTED = 3
22
22
--- @field err ? PromiseAsyncError
23
23
local Promise = setmetatable ({_id = promiseId }, {
24
24
__call = function (self , executor )
25
- return self . new (executor )
25
+ return self : new (executor )
26
26
end
27
27
})
28
28
Promise .__index = Promise
@@ -241,11 +241,9 @@ resolvePromise = function(promise, value)
241
241
end
242
242
end
243
243
244
- function Promise . new (executor )
244
+ function Promise : new (executor )
245
245
utils .assertType (executor , ' function' )
246
- --- @type Promise
247
- local o = setmetatable ({}, Promise )
248
-
246
+ local o = self == Promise and setmetatable ({}, self ) or self
249
247
o .state = PENDING
250
248
o .result = nil
251
249
o .queue = {}
@@ -258,7 +256,7 @@ function Promise.new(executor)
258
256
end
259
257
260
258
function Promise :thenCall (onFulfilled , onRejected )
261
- local o = Promise .new (noop )
259
+ local o = self .new (Promise , noop )
262
260
table.insert (self .queue , {o , onFulfilled , onRejected })
263
261
if self .state ~= PENDING then
264
262
handleQueue (self )
@@ -292,7 +290,7 @@ function Promise.resolve(value)
292
290
if Promise .isInstance (value , typ ) then
293
291
return value
294
292
else
295
- local o = Promise . new (noop )
293
+ local o = Promise : new (noop )
296
294
local thenCall = getThenable (value , typ )
297
295
if thenCall then
298
296
wrapExecutor (o , thenCall , value )
@@ -305,7 +303,7 @@ function Promise.resolve(value)
305
303
end
306
304
307
305
function Promise .reject (reason )
308
- local o = Promise . new (noop )
306
+ local o = Promise : new (noop )
309
307
o .state = REJECTED
310
308
o .result = reason
311
309
handleRejection (o )
314
312
315
313
function Promise .all (values )
316
314
utils .assertType (values , ' table' )
317
- return Promise . new (function (resolve , reject )
315
+ return Promise : new (function (resolve , reject )
318
316
local res = {}
319
317
local cnt = 0
320
318
for k , v in pairs (values ) do
337
335
338
336
function Promise .allSettled (values )
339
337
utils .assertType (values , ' table' )
340
- return Promise . new (function (resolve , reject )
338
+ return Promise : new (function (resolve , reject )
341
339
local res = {}
342
340
local cnt = 0
343
341
local _ = reject
362
360
363
361
function Promise .any (values )
364
362
utils .assertType (values , ' table' )
365
- return Promise . new (function (resolve , reject )
363
+ return Promise : new (function (resolve , reject )
366
364
local cnt = 0
367
365
local function rejectAggregateError ()
368
366
if cnt == 0 then
386
384
387
385
function Promise .race (values )
388
386
utils .assertType (values , ' table' )
389
- return Promise . new (function (resolve , reject )
387
+ return Promise : new (function (resolve , reject )
390
388
for _ , p in pairs (values ) do
391
389
Promise .resolve (p ):thenCall (function (value )
392
390
resolve (value )
0 commit comments