Actors
When you run a statechart, it becomes an actor, a running process that can receive events. Often, you’ll need your actor to run other actors; spawning new statecharts, waiting for promises, or subscribing to observables.
We use the invoke attribute on a state to invoke an actor in our machine. You can invoke an actor on any state, including the root node.
import { createMachine } from 'xstate';
const machine = createMachine(
  {
    invoke: {
      src: 'someActor',
    },
  },
  {
    // `actors` in v5
    services: {
      /**
       * The actor is defined here
       */
      someActor: async () => {},
    },
  },
);
You can also run several invocations at the same time by specifying invoke as an array:
import { createMachine } from 'xstate';
const machine = createMachine(
  {
    invoke: [
      {
        src: 'someActor',
      },
      {
        src: 'someOtherActor',
      },
    ],
  },
  {
    // `actors` in v5
    services: {
      someActor: async () => {},
      someOtherActor: async () => {},
    },
  },
);
Running several invocations simultaneously is useful when you want several sub-processes running on the same state.