Tôi đang tạo ứng dụng React/Redux bằng cách sử dụng phần mềm trung gian redux-thunk để tạo và xử lý các yêu cầu Ajax. Tôi có một thunk cụ thể được bắn khá thường xuyên, và tôi muốn hủy bỏ bất kỳ yêu cầu Ajax đã bắt đầu trước đó trước khi kích hoạt một cái mới. Điều này có thể không?Hủy hành động không đồng bộ trước đó bằng cách sử dụng redux-thunk
Trả lời
Một cách tiếp cận sẽ là đánh dấu các yêu cầu đó là bị hủy bằng cách cho chúng id ngẫu nhiên và kiểm tra trạng thái của nó trước khi xử lý kết quả.
Cách để thực hiện việc này là gán id ngẫu nhiên cho cuộc gọi này trong lần gửi đầu tiên của bạn (bên trong thư) và kiểm tra nó trong bộ giảm tốc trước khi xử lý kết quả.
const actionId = Math.random();
dispatch({type: AJAX_LOAD_CONST, id:actionId })
Khi bạn muốn hủy bỏ tất cả các yêu cầu sử dụng
dispatch({type:HANDLE_AJAX_RESPONSE, id:actionId, results: json })
Khi bạn muốn xử lý các kết quả không quên để gửi id mà bạn u
và trong bộ giảm tốc có dạng như sau:
function reducer(state = initialState, action) {
switch (action.type) {
case actions.AJAX_LOAD_CONST:
return Object.assign({}, state, { ajax: state.ajax.concat(action.id) });
case actions.CANCEL_ALL_AJAX:
return Object.assign({}, state, { ajax: [] });
case actions.HANDLE_AJAX_RESPONSE:
if (state.ajax.includes(action.id) {
//return state reduced with action.results here
}
return state;
}
}
Nếu bạn sử dụng XMLH ttpRequest hoặc một trong các trình bao bọc của nó (JQuery?), bạn cũng có thể lưu trữ các yêu cầu và gọi request.abort(). nếu bạn sử dụng api tìm nạp mới bạn không có sự sang trọng này như lời hứa thiếu hành vi này.
Bạn có thể làm cho người tạo hành động của bạn trả lại lời hứa, nó sẽ được trả về bởi chức năng gửi, sau đó nó sẽ có thể hủy bỏ nó. Dưới đây là một ví dụ:
Action tạo
function doSomething() {
return (dispatch) => {
return $.ajax(...).done(...).fail(...);
}
}
thành phần của bạn
componentDidMount(){
this.previousPromise = this.props.dispatch(doSomething());
}
somefnct() {
this.previousPromise.abort();
}
- 1. Sử dụng Hành động Không đồng bộ để Chạy Mã Đồng bộ
- 2. Bộ lọc hành động không đồng bộ trong MVC 4
- 3. Hủy cuộc gọi EJB không đồng bộ @
- 4. Hành động không đồng bộ hóa Redux-thunk: Sử dụng phần mềm trung gian tùy chỉnh cho các hành động không đồng bộ
- 5. Làm cách nào để liên kết hành động không đồng bộ với người tạo bằng flowtype?
- 6. Cách đọc nhiều tệp không đồng bộ với lời hứa, sau đó tiến hành
- 7. FormsAuthentication.SetAuthCookie ném NullReferenceException trong hành động không đồng bộ
- 8. Gọi đồng bộ các phương thức hợp đồng vận hành WCF không đồng bộ trên silverlight
- 9. hành động không đồng bộ/chờ đợi trong Vuex
- 10. ASP.NET MVC với Hành động Không đồng bộ
- 11. Tái sử dụng các hoạt động trước đó?
- 12. Chế độ Emacs org: cách điều chỉnh đồng hồ trước đó nếu tôi quên đồng hồ
- 13. Cách khởi động ứng dụng Angular 2 không đồng bộ
- 14. Sử dụng RACCommand với hoạt động mạng không đồng bộ
- 15. WebRequals không đồng bộ sử dụng C#
- 16. Có thể hủy bỏ XmlHttpRequest đồng bộ không?
- 17. Hủy tác vụ truy xuất URL không đồng bộ
- 18. không thể tải tệp lên bằng cách sử dụng Ajax.BeginForm() không đồng bộ
- 19. cách hủy yêu cầu http bằng cách sử dụng javascript
- 20. Không có dữ liệu được trả lại bằng cách sử dụng NSURLConnection Không đồng bộ
- 21. bộ lọc hành động không đồng bộ: Async & AuthorizeAttribute trong ASP.NET WEB API
- 22. cơ chế hủy không đồng bộ/chờ đợi
- 23. Cách tích hợp Google Analytics vào GWT bằng cách sử dụng tập lệnh không đồng bộ
- 24. Gọi các cuộc gọi không đồng bộ trong Silverlight WCF Proxy bằng cách sử dụng Moq
- 25. tải không đồng bộ một BitmapImage trong C# bằng cách sử dụng WPF
- 26. Ghi lại hành động bằng cách sử dụng Selenium
- 27. Làm cách nào để một người nào đó sử dụng CacheLoader của Guava một cách không đồng bộ
- 28. Làm cách nào để chuyển hướng đến hành động trước đó trong ASP.NET MVC?
- 29. Thực hiện các hành động như lời hứa được hoàn thành bằng cách sử dụng Promise.all()
- 30. cách kiểm tra các phương thức không đồng bộ bằng cách sử dụng nunit