Я только что написал маленького помощника для создания подобных API-интерфейсов в несколько последовательной форме, возможно, вам это понравится.
// > npm i mu-ffsm # install node dependency
var mkChained = require('mu-ffsm');
Идея состоит в том, что вы создаете свободный конструктор с некоторым начальным состоянием типа S
, вызывая функцию ввода. Затем каждый цепочечный вызов переводит состояние в новое состояние.
Значение, которое вы получаете при объединении в цепочку вызовов, может быть выполнено как функция, которая вызывает exit для создания значения из этого состояния и любых передаваемых вами опций.
- запись: * ⟶ S
- переход: (S ⟶ *) ⟶ S
- выход: S ⟶ (* ⟶ *)
Например
var API = mkChained({
0: function(opt) {return ;/* create initial state */},
then: function(s, opt) {return s; /* new state */},
whut: function(s, opt) {return s; /* new state */},
1: function(s, opt) {return ;/* compute final value */}
});
То есть 0
, 1
- функции входа, выхода. Все остальные функции переходят во внутреннее состояние.
Все функции могут принимать аргументы, например. opt
Мы создаем экземпляр нашего недавно созданного API,
var call = API() // entry
.whut() // transition
.then() // transition
.whut(); // transition
И назовите это
var result0 = call() // exit
, result1 = call() // exit
Посмотрите на (маленький) источник , чтобы увидеть, как это реализовано.
пс. Использовал этот ответ для обновления документации: D