Chuyển tới nội dung chính

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

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.

Bài 07, nửa đầu: đi vào vòng lặp

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.

Bài 07, nửa sau: ra khỏi vòng lặp

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

  1. Flow mới. Khai báo hai biến:
    • collectednumber, mặc định 0.
    • target_countnumber?, mặc định 3, Input ✓, Required ✓, mô tả How many times to collect this run.
  2. 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.
  3. Thân lặp, theo thứ tự: Click vào nút Collect → Variable 3. Add 1 to the counter một dòng, Add to it: collected + 1Wait chế độ random, 800–1300 ms, lý do pace between taps.
  4. 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.
  5. Sau Loop End: một node Variable với một dòng Show in run log cho collected, rồi Stop: success · Collection loop finished.
  6. 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.
  7. Save, Auto Layout.

Vì sao từng mảnh

MảnhVai 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ượtSố lần lặp đến theo từng lần chạy, từ người vận hành
Variable +1Trí nhớ riêng của flow về tiến độ của nó
Wait ngẫu nhiên800–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 EndBằ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.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.

Vòng lặp nhân mọi thứ bên trong nó

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. collected khởi từ mặc định 0 mỗ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 = 5 trả 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ỗiHậu quảCách sửa
Gán thay vì cộng (collected = 1)Bộ đếm mãi là 1Dùng Add to it / collected + 1
Bộ đếm không có mặc địnhnull + 1 làm hỏng dòng gánMặc định 0
Vẽ dây ngược về LoopKhông phải cách vòng lặp hoạt động ở đâyVùng lặp tự sinh định tuyến
Wait đặt ngoài thânNghỉ một lần tổng, không phải mỗi lượtGiữ nó giữa Click và Loop End
Mong form hỏi mà thiếu input ✓Lặng lẽ dùng giá trị mặc địnhTick 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ớ