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 }),
},
},
}