0

I have an xstate state machine in javascript. I invoke a promise on entering a state and show a spinning wheel while the promise is being resolved. I would like to detect network error and send a NETWORK_ERROR event to my state machine. How do I do this?

My promise call:

function connectToSomeEntity(waitTimeInMilliSeconds) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            try {
                /*do something like try connecting to a database*/
                resolve(0);
            } catch (error) { reject('[ErrorCode:-1] Unable to connect to server.'); }
        }, Number(waitTimeInMilliSeconds));
    });
}

my xstate state machine:

WAITFORCONNECT: {
    activities: ["showingLoadingPanel"],                                
     on: {
          DISCONNECTED: 'DISCONNECT',
          LOGIN_SUCCESS: 'CONNECTED',
          LOGIN_FAILURE: {
                target: 'showingAlert',
                actions: assign({ errorMessage: (context, event) => event.data })
          },
          LOGOUT: {                                        
              target: 'showingFinalAlert',
              actions: assign({ errorMessage: (context, event) => event.data })
          },
          CLOSEWINDOW: {                                        
               target: 'showingFinalAlert',
               actions: assign({ errorMessage: (context, event) => event.data })
          }
      },
      invoke: {
         src: (context, event) =>
          connectToSomeEntity(context.waitTimeInMilliSeconds),                                    
           onError: {
              target: "showingAlert",
              actions: assign({ errorMessage: (context, event) => event.data }),
          },
      },
  }
SoftwareDveloper
  • 559
  • 1
  • 5
  • 18
  • I had forgotten about guards. I put in a conditional guard that checks for network connectivity before transitioning into the WAITFORCONNECT state. – SoftwareDveloper Nov 04 '22 at 16:24

0 Answers0