Javascript 异步函数中的回调异步函数!对吗?
我希望这个重用异步函数可以使用很多地方Javascript 异步函数中的回调异步函数!对吗?,javascript,reactjs,typescript,axios,react-hooks,Javascript,Reactjs,Typescript,Axios,React Hooks,我希望这个重用异步函数可以使用很多地方 const requestGetData = (callback?: Function): void => { (async (): Promise<void> => { try { if (callback) { await callback(); } const data = await getDataApi();
const requestGetData = (callback?: Function): void => {
(async (): Promise<void> => {
try {
if (callback) {
await callback();
}
const data = await getDataApi();
setData(data);
} catch (error) {
console.log(error)
}
})();
};
我自定义异步是否正确?有更好的办法吗?我希望重用函数requestGetData考虑到在调用函数时,使用
wait
调用它,这意味着您总是希望回调函数是异步的。我建议将回调参数的类型声明更新为()=>Promise
,我不明白为什么这需要成为一个IIFE。否则,对我来说,它看起来很好。没有必要将它包装在IIFE中,也没有必要注意TS可以自动推断的函数类型。此外,与其使用函数,不如使用更具体的类型,如()=>void
考虑如下情况:
const requestGetData = async (callback?: () => void) => {
try {
if (callback) {
await callback();
}
setData(await getDataApi());
} catch (error) {
console.log(error);
}
};
另一个选项是完全删除回调,让调用方链接一个。然后
到requestUpdateData
调用:
const requestGetData = () => {
return getDataApi().then(setData);
};
requestUpdateData()
.then(requestGetData)
.catch((error) => {
console.log(error);
});
上面,requestGetData
返回其承诺链而不捕获,但如果应用程序中的其他内容在遇到错误时不需要特殊逻辑,则可以在其内部捕获
const requestGetData = async (callback?: () => void) => {
try {
if (callback) {
await callback();
}
setData(await getDataApi());
} catch (error) {
console.log(error);
}
};
const requestGetData = () => {
return getDataApi().then(setData);
};
requestUpdateData()
.then(requestGetData)
.catch((error) => {
console.log(error);
});