Port dan sambungan
Memahami port berarti memahami kapan sebuah kotak dijalankan. Halaman ini adalah rujukan bagi modelnya.
Tiga port implisit
Section titled “Tiga port implisit”Setiap kotak memilikinya, tanpa ketiganya muncul di dalam konfigurasinya:
| Port | Arah | Aliran | Peran |
|---|---|---|---|
in | Masukan | Sinyal | Pemicu. Beberapa sambungan masuk diterima |
error | Keluaran | Nilai + sinyal | Jalur kegagalan |
done | Keluaran | Sinyal | Dipancarkan 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.
Tipe aliran
Section titled “Tipe aliran”| Aliran | Gambaran mental | Perilaku |
|---|---|---|
| Nilai | Sebuah data | Mengangkut nilai; juga berfungsi sebagai pemicu |
| Sinyal | Sebuah aba-aba | Tidak mengangkut apa pun, hanya memicu |
| Keduanya | Mengangkut 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.
Tipe data
Section titled “Tipe data”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.
Kapan sebuah kotak dijalankan
Section titled “Kapan sebuah kotak dijalankan”Tiga aturan, menurut urutannya:
- Akar-akarnya berangkat. Setiap kotak tanpa sambungan masuk diaktifkan saat skenarionya diluncurkan. Tidak ada kotak “mulai”.
- 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.
- Port
inberperan 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).
done versus keluaran nilai
Section titled “done versus keluaran nilai”Inilah perbedaan yang paling berguna dalam praktik:
- sebuah keluaran nilai memancarkan begitu kotaknya menghasilkan hasilnya;
doneselain 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.
Cabang bersyarat
Section titled “Cabang bersyarat”Ini bukan mekanisme tersendiri: ini adalah port keluaran yang membawa sebuah peran, yang mengatur warnanya.
| Kotak | Keluaran |
|---|---|
| If | then / else |
| While, Do…While | then (badannya) |
| Assert | then (berhasil) / else (gagal) |
| Retry | attempt / exhausted |
| Schema validate | valid / invalid / errors |
| Switch | satu port per kasus, ditambah default |
| Koneksi Socket.IO | satu port per peristiwa yang dideklarasikan, ditambah others |
Selektor sambungan
Section titled “Selektor sambungan”Sebuah sambungan dapat membawa selektor: sebuah jalur yang diterapkan pada nilai yang sedang lewat.
data.items[0].idbody['user-id']headers["content-type"]statusBentuk 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.