У меня есть этот метод поиска в функциональном компоненте реагирования, где при каждом нажатии клавиши я выполняю сетевой запрос.Я пытаюсь отменить предыдущий запрос, если немедленно выполняется новый.К сожалению, этот код не отменяет запрос.Может кто-нибудь объяснить мне, почему?
let source
async function search(inputValue) {
// Check if we made a request
if (source) {
// Cancel the previous request before making a new request
source.cancel('Operation canceled due to new request.')
}
// Create a new CancelToken
source = axios.CancelToken.source()
try {
searchMovies(inputValue, { cancelToken: source.token }).then(filteredMovies => {
dispatch({ type: "FILTERED_MOVIES", filteredMovies })
})
} catch (error) {
if (axios.isCancel(error)) {
// Handle if request was cancelled
console.log("Request canceled", error.message)
} else {
// Handle usual errors
console.log("Something went wrong: ", error.message)
}
}
}
мои searchMovies
реализации это:
export const searchMovies = async (query = "", options, page = 1) => {
const { data = {} } = await axios(
`https://api.themoviedb.org/3/search/movie?api_key=${process.env.REACT_APP_API_KEY}&language=en-US&query=${query}&page=${page}&include_adult=false`
, { ...options })
const formatedData = data.results.map(movie => {
let title = movie.original_title || movie.original_name || movie.title || ""
return {
poster_path: `http://image.tmdb.org/t/p/w400/${movie.poster_path}`,
title,
id: movie.id
}
})
return formatedData
}