In a scenario where it's necessary to await
the machine to enter a final
state (a state which has no transitions), the onChange
callback (the second argument to interpret
) can be used
to resolve a promise. The promise can be externally awaited.
let resolve;
let promise = new Promise(_resolve => {
resolve = _resolve;
})
service = interpret(machine, () => {
if(machine.state.value.final) {
resolve();
}
});
await promise;
// All done!
This is particularly useful for state machines which consist entirely
of immediate
and invoke
states: these model execution flows which do
not depend on external events for their execution and state transition.