const promise = (ctx, e) => new Promise((resolve, reject) => { console.log('got called') resolve('done'); }); const opentokMachine = Machine({ id: 'opentok', initial: 'disconnected', context: { sessionId: null }, states: { disconnected: { id: 'disconnected', initial: 'init', states: { init: { invoke: { id: 'getToken', src: 'invokeGetToken', onDone: { target: "ready", actions: 'logToken' } }, entry: [ 'initSession', 'initPublisher' ] }, ready: { on: { 'JOIN': '#connected' } }, teardown: {} } }, connected: { id: 'connected', on: { 'DISCONNECT': '#disconnected.teardown' } } } }, { actions:{ logToken: (ctx, e) => console.log('get token'), initSession: (ctx, e) => console.log('initSession'), initPublisher: (ctx, e) => console.log('initPublisher') }, services: { invokeGetToken: async (ctx, e) => await promise() } } );