Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步函数中的回调异步函数!对吗?_Javascript_Reactjs_Typescript_Axios_React Hooks - Fatal编程技术网

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);
    });