add gs
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
--[[
|
||||
Provides utility functions for Promises
|
||||
]]
|
||||
|
||||
local CorePackages = game:GetService("CorePackages")
|
||||
|
||||
local Result = require(CorePackages.AppTempCommon.LuaApp.Result)
|
||||
local Promise = require(CorePackages.AppTempCommon.LuaApp.Promise)
|
||||
|
||||
local PromiseUtilities = {}
|
||||
|
||||
--[[
|
||||
Accept a table of promises;
|
||||
promises = {
|
||||
[1] = Promise.resolve(),
|
||||
["Home"] = Promise.reject(),
|
||||
...
|
||||
}
|
||||
Returns a new promise that:
|
||||
* is resolved when all input promises are finished.
|
||||
returns the results of each individual promises in a list of Results
|
||||
results = {
|
||||
[1] = Result1,
|
||||
["Home"] = Result2,
|
||||
...
|
||||
}
|
||||
* is never rejected.
|
||||
]]
|
||||
function PromiseUtilities.Batch(promises)
|
||||
assert(type(promises) == "table", "PromiseUtilities expects a list of Promises!")
|
||||
|
||||
local numberOfPromises = 0
|
||||
|
||||
for _, promise in pairs(promises) do
|
||||
assert(Promise.is(promise), "PromiseUtilities expects a list of Promises!")
|
||||
numberOfPromises = numberOfPromises + 1
|
||||
end
|
||||
|
||||
return Promise.new(function(resolve, reject)
|
||||
local totalCompleted = 0
|
||||
local results = {}
|
||||
|
||||
local function promiseCompleted(key, success, value)
|
||||
results[key] = Result.new(success, value)
|
||||
totalCompleted = totalCompleted + 1
|
||||
|
||||
if totalCompleted == numberOfPromises then
|
||||
resolve(results)
|
||||
end
|
||||
end
|
||||
|
||||
if next(promises) == nil then
|
||||
resolve(results)
|
||||
end
|
||||
|
||||
for key, promise in pairs(promises) do
|
||||
promise:andThen(
|
||||
function(result, ...)
|
||||
if select("#", ...) > 0 then
|
||||
warn("Promises in PromiseUtilities.Batch should not return tuple")
|
||||
end
|
||||
promiseCompleted(key, true, result)
|
||||
end,
|
||||
function(reason)
|
||||
promiseCompleted(key, false, reason)
|
||||
end
|
||||
)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function PromiseUtilities.CountResults(batchPromiseResults)
|
||||
local totalCount = 0
|
||||
local failureCount = 0
|
||||
|
||||
for _, result in pairs(batchPromiseResults) do
|
||||
local success, _ = result:unwrap()
|
||||
if not success then
|
||||
failureCount = failureCount + 1
|
||||
end
|
||||
totalCount = totalCount + 1
|
||||
end
|
||||
|
||||
return {
|
||||
successCount = totalCount - failureCount,
|
||||
failureCount = failureCount,
|
||||
totalCount = totalCount,
|
||||
}
|
||||
end
|
||||
|
||||
return PromiseUtilities
|
||||
Reference in New Issue
Block a user