Je viens d'écrire un little helper pour créer des API comme celui-ci d'une manière peu cohérente, peut-être que vous l'aimez.
// > npm i mu-ffsm # install node dependency
var mkChained = require('mu-ffsm');
L'idée est que vous construisez un constructeur fluide avec un état initial de type S
en appelant une fonction d'entrée. Ensuite, chaque appel enchaîné transition vers l'état à un nouvel état. .
La valeur que vous obtenez de enchaînant un tas d'appels peut être exécuté en fonction, qui appelle la sortie pour construire une valeur de cet état et toutes les options que vous passez
entrée
- : * ⟶ S
- transition: (S ⟶ *) ⟶ S
- sortie: S ⟶ (* ⟶ *)
Par exemple
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 */}
});
Alors 0
, 1
sont l'entrée, les fonctions de sortie. Toutes les autres fonctions passent d'un état interne. Toutes les fonctions peuvent prendre des arguments, par exemple.opt
Nous créons une instance de notre API nouvellement conçu,
var call = API() // entry
.whut() // transition
.then() // transition
.whut(); // transition
et appelez-
var result0 = call() // exit
, result1 = call() // exit
Jetez un oeil à la (petite) source pour voir comment cela est mis en œuvre.
ps. J'ai utilisé cette réponse pour mettre à jour les documents: D
Je pense que vous avez répondu à votre propre question ... qu'est-ce qui ne va pas avec le deuxième bloc de code? – Zoidberg
@Zoidberg: Le titre est le chaînage des méthodes, donc il ne s'agit pas vraiment de le faire fonctionner, mais de le faire fonctionner en utilisant le chaînage des méthodes. – kizzx2