0

我想从 onDone() 返回数据。我已经尝试过回复()功能,但它也无法正常工作。

server.route({
        method: 'POST',
        path: '/change-state/testing',
        handler:  function (request,h) {
             return interpret(machine)
             .onDone(e => {
               console.log('_____________________')
               console.log(e.data)
               console.log('_____________________')
                 return e.data // I want to return e.data
             })
            .start();
        }
    });
4

1 回答 1

0

我使用一个动作做到了这一点:

export const machineDefinition = {
  id: 'loginForm',
  initial: 'idle',
  states: {
    idle: {
      on: {
        PROCESS: [
          {
            cond: 'dataIsValid',
            actions: [ 'cleanErrorOnInputs' ],
            target: 'processing',
          },
        ],
      },
    },
    processing: {
      entry: [ 'disableAll' ],
      invoke: [
        {
          id: 'signIn',
          src: 'signIn',
          onDone: {
            actions: [ 'sendDataToParent' ],
            target: 'finished',
          },
          onError: {
            actions: [ 'saveError' ],
            target: 'failed',
          },
        },
      ],
      exit: [ 'enableAll' ],
    },
    finished: {
      on: {
        PROCESS: {
          target: 'processing',
        },
      },
    },
    failed: {
      after: {
        1: {
          target: 'idle',
        },
      },
    },
  },
};

动作看起来像这样:

const machineOptions = {
  actions: {
    sendDataToParent: sendParent((context, event) => ({ type: 'SAVE_SESSION', data: event.data })),
  },
};

因此,通过这种方式,我将数据保存在上下文中。

如果还不够清楚,可以查看这个样板

于 2021-12-05T18:44:53.183 回答