Tìm kiếm trang web

javascript - Cách tốt nhất để lấy kết quả của một hành động là gì?


Tôi tò mò không biết việc nhận kết quả từ một hành động có phải là một phương pháp hợp lệ không, và nếu có thì làm thế nào để thực hiện điều đó?

Ví dụ, giả sử tôi có một trang với biểu mẫu để tạo thực thể, sau khi tạo thực thể thành công, tôi muốn chuyển hướng người dùng đến trang chi tiết của thực thể, nếu không (khi thất bại) thì cập nhật biểu mẫu bằng các thông báo lỗi. Tôi muốn thực hiện điều đó mà không trộn lẫn các lớp ứng dụng (ví dụ: không chuyển hướng người dùng trong epic/effect sau khi thành công).

Tôi có một vài phương pháp tiếp cận vấn đề này trong đầu:

  1. (mô hình quan sát được) gửi một hành động “kích hoạt” (entity_add), sau đó gửi một hành động thành công (entity_add_success) hoặc thất bại (entity_add_failure) ở đâu đó trong epic/effect của tôi, chờ hành động thất bại hoặc thành công và thực hiện một hành động - phương pháp này có một nhược điểm rõ ràng: những thực thể khác có thể được tạo ra trong khi đó và làm thế nào để phân biệt các hành động thất bại/thành công của các thực thể trong trường hợp đó?

  2. (mẫu callback) gửi đi một hành động kích hoạt với tham số callback bổ sung, tham số này sẽ được gọi khi kết quả hành động được xác định, phương pháp này cũng có một nhược điểm (không lớn bằng phương pháp trước đó): khả năng tạo ra callback hell.

  3. (mẫu dịch vụ) từ bỏ việc sử dụng flux trong trường hợp đó, sử dụng dịch vụ trực tiếp, nhược điểm thiết kế: trộn lẫn các lớp ứng dụng

Tôi sẽ rất vui khi nghe bất kỳ ý tưởng nào.

Câu trả lời #1

Tôi đã sử dụng tùy chọn thứ hai (gắn một callback vào hành động khởi tạo) nhiều lần thành công. Theo quan điểm của tôi, đây là sự đánh đổi tốt nhất. Tôi không thấy nguy cơ của việc callback lồng nhau sâu ("luyện địa ngục callback") vì thường thì tôi chỉ cần kích hoạt một hành động duy nhất và sau đó làm điều gì đó đơn giản như chuyển hướng sang một trang khác.