javascript-state-machine文档翻译07:错误处理

无效转换

默认情况下,如果试图触发一个当前状态不允许的转换动作,状态机将抛出异常。如果你更愿意自己处理这个问题,可以自定义一个onInvalidTransition处理方法:

  var fsm = new StateMachine({
    init: 'A',
    transitions: [
      { name: 'step',  from: 'A', to: 'B' },
      { name: 'reset', from: 'B', to: 'A' }
    ],
    methods: {
      onInvalidTransition: function(transition, from, to) {
        throw new Exception("transition not allowed from that state");
      }
    }
  });

  fsm.state;        // 'A'
  fsm.can('step');  // true
  fsm.can('reset'); // false

  fsm.reset();      //  <-- 抛出 "transition not allowed from that state"

待定转换

默认情况下,如果试图触发一个生命周期事件挂起的转换动作,状态机将抛出异常。如果你更愿意自己处理这个问题,可以自定义一个onPendingTransition处理方法:

  var fsm = new StateMachine({
    init: 'A',
    transitions: [
      { name: 'step', from: 'A', to: 'B' },
      { name: 'step', from: 'B', to: 'C' }
    ],
    methods: {
      onLeaveA: function() {
        this.step();    //  <-- uh oh, trying to transition from within a lifecycle event is not allowed
      },
      onPendingTransition: function(transition, from, to) {
        throw new Exception("transition already in progress");
      }
    }
  });

  fsm.state;       // 'A'
  fsm.can('step'), // true
  fsm.step();      //  <-- 抛出 "transition already in progress"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值