--!strict --[=[ Tracks pending promises @class PendingPromiseTracker ]=] local require = require(script.Parent.loader).load(script) local Promise = require("Promise") local PendingPromiseTracker = {} PendingPromiseTracker.ClassName = "PendingPromiseTracker" PendingPromiseTracker.__index = PendingPromiseTracker export type PendingPromiseTracker = typeof(setmetatable( {} :: { _pendingPromises: { [Promise.Promise]: true }, }, {} :: typeof({ __index = PendingPromiseTracker }) )) --[=[ Returns a new pending promise tracker @return PendingPromiseTracker ]=] function PendingPromiseTracker.new(): PendingPromiseTracker local self = setmetatable({}, PendingPromiseTracker) self._pendingPromises = {} return self end --[=[ Adds a new promise to the tracker. If it's not pending it will not add. ]=] function PendingPromiseTracker.Add(self: PendingPromiseTracker, promise: Promise.Promise) if promise:IsPending() then self._pendingPromises[promise] = true promise:Finally(function() self._pendingPromises[promise] = nil end) end end --[=[ Gets all of the promises that are pending ]=] function PendingPromiseTracker.GetAll(self: PendingPromiseTracker): { Promise.Promise } local promises: { Promise.Promise } = {} for promise: any, _ in self._pendingPromises do table.insert(promises, promise) end return promises end return PendingPromiseTracker