Lewati ke konten

Port dan sambungan

Memahami port berarti memahami kapan sebuah kotak dijalankan. Halaman ini adalah rujukan bagi modelnya.

Setiap kotak memilikinya, tanpa ketiganya muncul di dalam konfigurasinya:

PortArahAliranPeran
inMasukanSinyalPemicu. Beberapa sambungan masuk diterima
errorKeluaranNilai + sinyalJalur kegagalan
doneKeluaranSinyalDipancarkan setelah kotaknya dan seluruh sub-grafnya di hilir selesai

Tiga kotak tidak memiliki port error: Output, Sekarang, dan Retry (yang terakhir itu sendiri merupakan batas galat). Dua kotak tidak memiliki done: Output dan Throw.

AliranGambaran mentalPerilaku
NilaiSebuah dataMengangkut nilai; juga berfungsi sebagai pemicu
SinyalSebuah aba-abaTidak mengangkut apa pun, hanya memicu
KeduanyaMengangkut nilai dan memicu

Satu-satunya kombinasi yang terlarang: keluaran sinyal murni menuju masukan nilai murni. Tidak akan ada apa pun untuk diisikan ke dalam nilainya.

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

Pengetikan itu terutama berguna untuk kenyamanan visual, dengan satu pengecualian yang ketat: sebuah masukan bertipe list (port list milik aksi Tambahkan ke daftar dan Hapus dari daftar) menolak sumber yang tidak kompatibel dengan list. json dan list saling kompatibel; sebuah object biasa tidak.

  • Sebuah port masukan hanya menerima satu sambungan. Inilah yang membuat grafnya mudah dibaca: satu nilai, satu asal.
  • Kecuali in, yang menerima sebanyak apa pun sambungan yang diinginkan.
  • Sebuah keluaran dapat memasok sebanyak apa pun masukan yang diinginkan.

Tiga aturan, menurut urutannya:

  1. Akar-akarnya berangkat. Setiap kotak tanpa sambungan masuk diaktifkan saat skenarionya diluncurkan. Tidak ada kotak “mulai”.
  2. Hanya masukan yang tersambung yang ditunggu. Sebuah kotak dijalankan ketika setiap port masukannya yang benar-benar terhubung telah menerima nilai. Port yang tidak tersambung tidak pernah ditunggu. Nilainya tetap diingat: sebuah masukan menyimpan nilai terakhir yang diterimanya.
  3. Port in berperan sebagai penghalang. Bila dipasok oleh beberapa sambungan, ia menunggu hingga semuanya tiba, lalu memicu satu kali. Inilah “tunggu sampai ketiga cabang ini selesai” dalam modelnya.

Pengecualiannya: mainkan ulang pada setiap peristiwa

Section titled “Pengecualiannya: mainkan ulang pada setiap peristiwa”

Opsi “Mainkan ulang pada setiap peristiwa yang diterima” (menu konteks kotaknya) mengubah semua masukan yang tersambung menjadi gerbang “atau” yang tidak menghalangi: kotaknya terpicu ulang pada setiap nilai yang diterima, di port mana pun.

Dua kegunaannya: mengolah sebuah aliran pesan demi pesan, dan membuka siklus penyelesaian (sebuah graf yang berputar kembali ke dirinya sendiri).

Inilah perbedaan yang paling berguna dalam praktik:

  • sebuah keluaran nilai memancarkan begitu kotaknya menghasilkan hasilnya;
  • done selain itu menunggu hingga semua yang mengonsumsi hasil tersebut selesai.

Untuk mengurutkan — “lakukan semua itu, lalu bersihkan” — sambungkan dari done. Untuk meneruskan sebuah data, sambungkan dari keluaran nilainya.

Ini bukan mekanisme tersendiri: ini adalah port keluaran yang membawa sebuah peran, yang mengatur warnanya.

KotakKeluaran
Ifthen / else
While, Do…Whilethen (badannya)
Assertthen (berhasil) / else (gagal)
Retryattempt / exhausted
Schema validatevalid / invalid / errors
Switchsatu port per kasus, ditambah default
Koneksi Socket.IOsatu port per peristiwa yang dideklarasikan, ditambah others

Sebuah sambungan dapat membawa selektor: sebuah jalur yang diterapkan pada nilai yang sedang lewat.

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

Bentuk a.b, a[0], a['kunci'], dan a["kunci"] diterima. Segmen yang berisi JSON diurai secara langsung; jalur yang tidak cocok dengan apa pun menghasilkan undefined.

Restorm kadang menyimpulkan sebuah selektor dengan sendirinya pada saat penyambungan, ketika sumbernya memiliki pratinjau statis yang menyusut menjadi satu nilai primitif. Anda selalu dapat menggantinya atau mengosongkannya.