[英]Callback Async function inside async function ! Is correct?
我希望這個重用異步函數用在很多地方!
const requestGetData = (callback?: Function): void => {
(async (): Promise<void> => {
try {
if (callback) {
await callback();
}
const data = await getDataApi();
setData(data);
} catch (error) {
console.log(error)
}
})();
};
我有不同的異步功能:
const requestUpdateData = async (): Promise<void> => {
await postUpdate();
setCountUpdate(count+1);
};
我將使用:
...
const handleUpdate=()=>{
requestGetData(requestUpdateData);
}
useEffect(()=>{
requestGetData()
},[])
我自定義 async 是否正確? 有沒有更好的辦法 ? 我想重用函數 requestGetData
考慮到調用該函數時,您使用await
調用它,這意味着您始終希望回調函數是異步的。 我建議將回調參數的類型聲明更新為() => Promise<any>
並且我不明白為什么這需要是 IIFE。 否則,對我來說看起來不錯。
無需將其包裝在 IIFE 中,也無需注意 TS 可以自動推斷出的函數類型。 此外,最好使用更具體的類型,例如() => void
,而不是Function
。
考慮如下:
const requestGetData = async (callback?: () => void) => {
try {
if (callback) {
await callback();
}
setData(await getDataApi());
} catch (error) {
console.log(error);
}
};
另一種選擇是完全刪除回調,並讓調用者鏈一個.then
到requestUpdateData
調用上:
const requestGetData = () => {
return getDataApi().then(setData);
};
requestUpdateData()
.then(requestGetData)
.catch((error) => {
console.log(error);
});
上面, requestGetData
返回它的 Promise 鏈而不進行捕獲,但是如果應用程序中的其他任何內容在遇到錯誤時不需要特殊邏輯,則您可以根據需要在其中捕獲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.