Gå til indhold

Porte og forbindelser

At forstå portene er at forstå, hvornår en boks kører. Denne side er modellens reference.

Enhver boks har dem, uden at de optræder i dens konfiguration:

PortRetningFlowRolle
inIndgangSignalUdløser. Flere indgående forbindelser accepteres
errorUdgangVærdi + signalFejlrute
doneUdgangSignalUdsendes, når boksen og hele dens efterfølgende delgraf er færdig

Tre bokse har ingen error-port: Output, Nu og Retry (sidstnævnte er selv en fejlgrænse). To har ingen done: Output og Throw.

FlowMental figurOpførsel
VærdiEt stykke dataTransporterer en værdi; fungerer også som udløser
SignalEt tikTransporterer intet, udløser kun
BeggeTransporterer en værdi og udløser

Den eneste forbudte kombination: en udgang med et rent signal ind i en indgang med en ren værdi. Der ville ikke være noget at lægge i værdien.

any · json · number · string · boolean · duration · response · status · list · object.

Typerne tjener først og fremmest det visuelle overblik, med én streng undtagelse: en indgang af typen liste (porten list på handlingerne Føj til liste og Fjern fra liste) afviser en kilde, der ikke er listekompatibel. json og list er indbyrdes kompatible; et simpelt object er det ikke.

  • En indgangsport accepterer kun én forbindelse. Det er dét, der gør grafen læsbar: én værdi, ét ophav.
  • Undtagen in, som accepterer lige så mange forbindelser, du vil.
  • En udgang kan fodre lige så mange indgange, du vil.

Tre regler, i denne rækkefølge:

  1. Rødderne starter. Enhver boks uden indgående forbindelse sættes i gang, når scenariet startes. Der findes ingen »start«-boks.
  2. Kun tilkoblede indgange ventes der på. En boks kører, når hver af dens faktisk forbundne indgangsporte har modtaget en værdi. Der ventes aldrig på en port, der ikke er koblet til. Værdierne huskes: en indgang bevarer den senest modtagne værdi.
  3. Porten in er en barriere. Fodres den af flere forbindelser, venter den på, at alle er nået frem, og udløser så én gang. Det er modellens »vent til disse tre grene er færdige«.

Indstillingen »Gentag ved hver modtaget hændelse« (boksens kontekstmenu) forvandler alle tilkoblede indgange til ikke-blokerende »eller«-porte: boksen udløses igen ved hver modtaget værdi, på en vilkårlig port.

To anvendelser: at behandle en strøm besked for besked, og at låse en færdiggørelsescyklus op (en graf, der løber tilbage i sig selv).

Det er den mest nyttige skelnen i praksis:

  • en værdiudgang sender af sted, så snart boksen har produceret sit resultat;
  • done venter derudover på, at alt det, der forbruger resultatet, er færdigt.

Vil du sekvensere — »gør alt dette, og ryd så op« — så kobl fra done. Vil du sende data videre, så kobl fra værdiudgangen.

De er ikke en mekanisme for sig: de er udgangsporte, der bærer en rolle, som styrer deres farve.

BoksUdgange
Ifthen / else
While, Do…Whilethen (kroppen)
Assertthen (succes) / else (fejl)
Retryattempt / exhausted
Schema validatevalid / invalid / errors
Switchén port pr. tilfælde, plus default
Socket.IO-forbindelseén port pr. erklæret hændelse, plus others

En forbindelse kan bære en selektor: en sti anvendt på den værdi, der er undervejs.

data.items[0].id
body['user-id']
headers["content-type"]
status

Formerne a.b, a[0], a['clé'] og a["clé"] accepteres. Et segment, der indeholder JSON, parses undervejs; en sti, der ikke matcher noget, giver undefined.

Restorm udleder undertiden en selektor helt af sig selv, når du kobler til, hvis kilden har et statisk eksempel, der reducerer til en enkelt primitiv værdi. Du kan altid erstatte den eller tømme den.