reactjs - 使用 saga debounce 时取消上一个请求
问题描述
问题是服务器响应时间可能会有所不同,有时前一个请求在最晚之后到达并影响状态。这个问题很容易解决takeLatest
,但我想知道是否有办法解决这个问题debounce
。
import { SEARCH_ARTICLES } from "../constants";
import { setError, setSearchArticles } from "../actions";
import { put, call, debounce } from "redux-saga/effects";
import fetchAPI from "../../API/fetchAPI";
function* debounceSearch() {
yield debounce(500, SEARCH_ARTICLES, fetchData);
}
export function* fetchData(action) {
const { keyword } = action;
try {
const response = yield call(
fetchAPI,
`https://openlibrary.org/search.json?title=${keyword}&page=1`
);
yield put(setSearchArticles(response.data.docs));
} catch (e) {
yield put(setError(e.message));
}
}
export default debounceSearch;
对于取消我使用这种方法:
import axios, { CancelToken } from "axios";
import { CANCEL } from "redux-saga";
export default function fetchAPI(url) {
const source = CancelToken.source();
const request = axios.get(url, { cancelToken: source.token });
request[CANCEL] = () => source.cancel();
return request;
}
解决方案
推荐阅读
- java - 爪哇。计算正确的变化
- apache-spark - 如果作业花费的时间比预期的长,则终止 Spark 作业或终止 EMR 集群
- angular - 选择选项并在其他下拉菜单中禁用相同的选项
- afp - 如何在 C# 或 Java 中获取 AFP 文件的页数
- python - 更改python中的字典字典
- c# - 如何在活动中调用 Owin StartUp?
- c - 文件夹内的xcode c文件未执行
- c# - 在响应 302 的位置注销重定向 URI 后丢失
- python - 解密后的令牌不包含任何东西,Python
- python - 即使在名称冲突的情况下,pip 也可以从 PyPi 上的私有索引中选择包?