1. const readline = require('readline');
    2. let rl = readline.createInterface({
    3. input: process.stdin,
    4. output: process.stdout
    5. })
    6. let State = Object.freeze({
    7. offHook: '拿起座机手柄',
    8. connecting: '连接中',
    9. connected: '已连接',
    10. onHook: '放下座机手柄'
    11. });
    12. let Trigger = Object.freeze({
    13. callDialed: '拔号',
    14. hungUp: '挂断电话',
    15. callConnected: '打通电话',
    16. leftMessage: '留言'
    17. });
    18. let rules = {};
    19. rules[State.offHook] = [
    20. {
    21. trigger: Trigger.callDialed,
    22. state: State.connecting
    23. }
    24. ];
    25. rules[State.connecting] = [
    26. {
    27. trigger: Trigger.hungUp,
    28. state: State.onHook
    29. },
    30. {
    31. trigger: Trigger.callConnected,
    32. state: State.connected
    33. }
    34. ];
    35. rules[State.connected] = [
    36. {
    37. trigger: Trigger.leftMessage,
    38. state: State.onHook
    39. },
    40. {
    41. trigger: Trigger.hungUp,
    42. state: State.onHook
    43. }
    44. ];
    45. let state = State.offHook;
    46. let exitState = State.onHook;
    47. let getInput = function () {
    48. let prompt = [
    49. `当前电话正处于${state}`,
    50. `下一步:`
    51. ]
    52. for (let i = 0; i < rules[state].length; i++) {
    53. let trigger = rules[state][i].trigger;
    54. prompt.push(`${i}, ${trigger}`);
    55. }
    56. prompt.push('');
    57. rl.question(prompt.join('\n'), function (answer) {
    58. let input = parseInt(answer);
    59. state = rules[state][input].state;
    60. if (state !== exitState) {
    61. getInput();
    62. } else {
    63. console.log(`我们使用完了座机电话`);
    64. rl.close();
    65. }
    66. })
    67. }
    68. getInput();