我尝试使用 lodash 的去抖函数从 API 请求返回去抖搜索结果,但始终从调用中获取 undefined
。
这是我的代码,请帮忙;
const searchSuggestionsRequest = async (input) => {
const params = {
userInput: encodeURIComponent(input),
};
const { data } = await axios.get(`${BASE_URL}/api/location`, { params });
return data;
};
const debouncedSuggestionsRequest = _.debounce(searchSuggestionsRequest, 500);
const fetchSearchSuggestions = (input) => {
return debouncedSuggestionsRequest(input);
};
handleSearchSuggestions = async (input) => {
const searchObj = await fetchSearchSuggestions(input);
console.log('searchObj', searchObj);
};
handleSearchSuggestions()
最佳答案
您期望 debounce 函数返回原始函数的结果,或者在您的情况下返回已解决的 promise 。但这不是去抖动功能的工作原理。
debounce 函数用自己的代码包装您的函数,在其中检查我们的 not 中是否有任何新的调用文件。经过一定时间后,您的功能最终会启动。但它无法返回该函数的结果。
您需要定义一个更全局的作用域(或者至少是一个与您的函数重叠的作用域)变量,并在您获取 axios 结果的函数中设置该变量。
您的问题仍然是您无法等待结果,因此您的 console.log 仍然是未定义的。我个人是在 Vue 中开发的,我可以在变量上设置 react 性观察器。
关于javascript - 如何等待来自 async/await 去抖 axios 调用的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62491317/