WaitFor
Utility class for awaiting the existence of instances.
By default, all promises timeout after 60 seconds, unless the timeout
argument is specified.
NOTE
Promises will be rejected if the parent (or any ancestor) is unparented from the game.
Set name before parent
When waiting for instances based on name (e.g. WaitFor.Child
), the WaitFor
system is listening to events to capture these instances being added. This
means that the name must be set before being parented into the object.
Properties
Error
WaitFor.Error:
{
Unparented:
string
,
ParentChanged:
string
}
Functions
Child
Wait for a child to exist within a given parent based on the child name.
WaitFor.Child(parent, "SomeObject"):andThen(function(someObject)
print(someObject, "now exists")
end):catch(warn)
Children
Wait for all children to exist within the given parent.
WaitFor.Children(parent, {"SomeObject01", "SomeObject02"}):andThen(function(children)
local someObject01, someObject02 = table.unpack(children)
end)
NOTE
Once all children are found, a second check is made to ensure that all children
are still directly parented to the given parent
(since one child's parent
might have changed before another child was found). A rejected promise with the
WaitFor.Error.ParentChanged
error will be thrown if any parents of the children
no longer match the given parent
.
Descendant
Wait for a descendant to exist within a given parent. This is similar to
WaitFor.Child
, except it looks for all descendants instead of immediate
children.
WaitFor.Descendant(parent, "SomeDescendant"):andThen(function(someDescendant)
print("SomeDescendant now exists")
end)
Descendants
Wait for all descendants to exist within a given parent.
WaitFor.Descendants(parent, {"SomeDescendant01", "SomeDescendant02"}):andThen(function(descendants)
local someDescendant01, someDescendant02 = table.unpack(descendants)
end)
NOTE
Once all descendants are found, a second check is made to ensure that none of the
instances have moved outside of the parent (since one instance might change before
another instance is found). A rejected promise with the WaitFor.Error.ParentChanged
error will be thrown if any of the instances are no longer descendants of the given
parent
.
PrimaryPart
Wait for the PrimaryPart of a model to exist.
WaitFor.PrimaryPart(model):andThen(function(primaryPart)
print(primaryPart == model.PrimaryPart)
end)
ObjectValue
Wait for the Value of an ObjectValue to exist.
WaitFor.ObjectValue(someObjectValue):andThen(function(value)
print("someObjectValue's value is", value)
end)
Custom
WaitFor.
Custom
(
predicate:
(
)
→
T?
,
timeout:
number?
) →
Promise
<
T
>
Wait for the given predicate function to return a non-nil value of
of type T
. The predicate is fired every RunService Heartbeat step.
-- Example, waiting for some property to be set:
WaitFor.Custom(function() return vectorForce.Attachment0 end):andThen(function(a0)
print(a0)
end)