Bài 07 · Đếm bằng biến
Làm N lần — trong đó N được chọn lúc chạy, không phải khắc cứng vào flow.
Bài toán
Chạm Collect ba lần. Ngày mai, năm lần. Flow không nên đổi — chỉ con số đổi.
Bài này giới thiệu bộ máy mà mọi automation lặp lại đứng trên đó: một Loop (Vòng lặp), một biến đếm, và một Flow Input người vận hành điền khi khởi chạy.
Bạn sẽ học được
- Vùng Loop / Loop End: thân lặp lại, dây định tuyến được sinh tự động.
- Đếm bằng node Variable (Biến):
collected = collected + 1. - Khai báo Flow Input —
{{target_count}}làm số vòng lặp. - Nhịp ngẫu nhiên để chuỗi lặp không nhìn như máy.
- Ghi một giá trị v ào nhật ký chạy.
Trước khi bắt đầu
- Hoàn thành Bài 06.
Flow
Flow này cao hơn một ảnh chụp dễ đọc, nên đây là hai nửa của nó ở mức zoom đầy đủ. Các badge đánh số node theo thứ tự đọc, khớp với phần Dựng flow bên dưới.

Vào vòng lặp: ① Start ② Loop lặp {{target_count}} lần ③ Click ④ Variable cộng 1 ⑤ Wait giữ nhịp giống người.

Ra khỏi vòng lặp: ① node cộng bộ đếm và ② Wait lặp lại (cả hai hiện lại để nối mạch), rồi ③ Loop End — node trình soạn tự tạo cho bạn — ④ Variable ghi log tổng, và ⑤ kết thúc thành công.
Dựng flow
- Flow mới. Khai báo hai biến:
collected— number, mặc định0.target_count— number?, mặc định3, Input ✓, Required ✓, mô tảHow many times to collect this run.
- Thêm một Loop tên
1. Repeat {{target_count}} times: chế độ Count, Max iterations{{target_count}}— đúng vậy, tham chiếu biến dùng được ở đây. Loop End cặp đôi tự xuất hiện. - Thân lặp, theo thứ tự: Click vào nút Collect → Variable
3. Add 1 to the countermột dòng, Add to it:collected+1→ Wait chế độ random,800–1300ms, lý dopace between taps. - Trên Loop End, đặt Aggregation: iteration count — vòng lặp sẽ báo nó thực chạy bao nhiêu lượt.
- Sau Loop End: một node Variable với một dòng Show in run log cho
collected, rồiStop: success · Collection loop finished. - Nối chuỗi như sơ đồ — lưu ý không phải vẽ dây vòng ngược nào: cặp Loop/Loop End tự sinh phần định tuyến lặp.
- Save, Auto Layout.
Vì sao từng mảnh
| Mảnh | Vai trò |
|---|---|
| Loop (chế độ count) | Quyết định trước mỗi lượt thân có chạy tiếp không |
{{target_count}} làm số lượt | Số lần lặp đến theo từng lần chạy, từ người vận hành |
| Variable +1 | Trí nhớ riêng của flow về tiến độ của nó |
| Wait ngẫu nhiên | 800–1300 ms bốc lại mỗi lượt — chuỗi lặp hết đều tăm tắp |
| Aggregation của Loop End | Bằng chứng độc lập về số lượt đã chạy |
| Dòng log | Đưa collected vào nhật ký chạy nơi bạn nhìn thấy nó |
Flow Input biến flow thành hàm. Vì target_count được khai là input, form Run hỏi nó trước mỗi lần chạy (mặc định 3 điền sẵn). Cùng một flow đã lưu chạy với 3, 5 hay 20 — không sửa gì. Ở Bài 11, một flow cha sẽ truyền giá trị này vào bằng lập trình.
Sao phải đếm bằng Variable khi vòng lặp đã đếm? Hai lý do. Biến đếm sống qua vòng lặp — node báo cáo đọc nó sau Loop End. Và nó đếm thứ bạn chọn: trong capstone, biến chỉ tăng ở lần thu thành công, còn số lượt thì cứ trôi bất kể. Số lượt và thành quả là hai con số khác nhau.
Mỗi lượt ở đây tốn một cú chạm cộng ~1 giây nhịp. Với target_count = 20, khoảng ~20 giây — ổn. Nhưng phép nhân ấy áp lên mọi node chậm bạn từng đặt vào thân lặp. Hãy hoạch định vòng lặp có ý thức, và nhớ số node thực thi trong vòng lặp cũng tính vào ngưỡng maxNodeExecutions của flow.
Chạy thử
Chạy flow — form Run hỏi target_count. Chấp nhận 3. Kỳ vọng: ba cú chạm cách nhau chừng một giây, rồi log hiện collected = 3, kết thúc success · Collection loop finished.
Chạy lại với 5. Năm cú chạm. Cùng một flow.
Best practices
- Gắn số vòng lặp vào Flow Input mỗi khi con người có thể muốn một con số khác.
- Nhịp ngẫu nhiên trong vòng lặp — độ trễ cố định vừa chậm hơn mức cần vừa lộ rõ chất máy móc.
- Reset bộ đếm ở ranh giới tự nhiên.
collectedkhởi từ mặc định0mỗi lần chạy; nếu flow lặp theo chuyến, reset ở ranh giới chuy ến, không phải ở đầu mỗi vòng. - Log những tổng số bạn quan tâm. Nhật ký ghi
collected = 5trả lời câu "hôm qua nó có chạy thật không?" của ngày mai. - Input bắt buộc cho quyết định bắt buộc.
Required ✓chặn lần chạy khởi động với ô số trống.
Lỗi thường gặp
| Lỗi | Hậu quả | Cách sửa |
|---|---|---|
Gán thay vì cộng (collected = 1) | Bộ đếm mãi là 1 | Dùng Add to it / collected + 1 |
| Bộ đếm không có mặc định | null + 1 làm hỏng dòng gán | Mặc định 0 |
| Vẽ dây ngược về Loop | Không phải cách vòng lặp hoạt động ở đây | Vùng lặp tự sinh định tuyến |
| Wait đặt ngoài thân | Nghỉ một lần tổng, không phải mỗi lượt | Giữ nó giữa Click và Loop End |
Mong form hỏi mà thiếu input ✓ | Lặng lẽ dùng giá trị mặc định | Tick Input trên khai báo |
Khắc phục sự cố
Vòng lặp chạy đúng một lượt.
Max iterations không phân giải được — kiểm tra tham chiếu đúng là {{target_count}} và biến đã khai báo.
collected log ra 0.
Node đếm nằm ngoài thân lặp, hoặc dòng của nó gán thay vì cộng.
Chạy mà không được hỏi số lần. Khai báo thiếu Input ✓, hoặc bạn khởi chạy qua ngữ cảnh có sẵn giá trị lưu (mục queue — các bài sau).
Tóm tắt
- Loop/Loop End lặp một thân; định tuyến được sinh, số lượt có thể là
{{biến}}. - Flow Input khiến một flow đã lưu phục vụ nhiều lần chạy.
- Đếm thành quả trong biến của bạn; để vòng lặp đếm số lượt.
Tiếp theo
Đến giờ mọi thứ đều giả định cú chạm ăn và phép đọc thành công. Bài 08 · Retry hay rẽ nhánh nói về cái ngày chúng không như thế — và cách chọn đúng công cụ xử lý lỗi thay vì công cụ theo phản xạ.
Xem thêm: Loop · Variable · Wait · Biến và bộ nhớ