[英]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.