Javascript 如何在函数中等待fetch函数?

Javascript 如何在函数中等待fetch函数?,javascript,async-await,fetch,Javascript,Async Await,Fetch,下面是我的代码 export const redirectDomain: any = (lang, ctx, res) => { let redirectString; const getData = async () => { try { const response = await fetch('https://www.example.com'); const data= await respons

下面是我的代码

export const redirectDomain: any = (lang, ctx, res) => {
    let redirectString;

    const getData = async () => {
        try {
            const response = await fetch('https://www.example.com');
            const data= await response.json();

            return data;
        } catch (error) {
            console.log('[ERROR]');
        }
    };

    const data = getData();
    const redirectUrl = data.split(',');

    return redirectUrl;
};
为什么输出会显示错误

无法读取未定义的属性“split”


async
函数之外的事情不会等待承诺得到解决。因此
数据
拆分时仍然是
未定义的
。所以这里有一个解决方案

export const redirectDomain: any = async (lang, ctx, res) => {
    let redirectString;

    const getData = async () => {
        try {
            const response = await fetch('https://www.example.com');
            const data = await response.json();

            return data;
        } catch (error) {
            console.log('[ERROR]');
        }
    };

    const data = await getData();
    const redirectUrl = data.split(',');

    return redirectUrl;
};
另一个解决方案(我更愿意):

另外,如果我要编写这段代码(让我想想如何处理错误xD):


我想说的一点是,有时承诺看起来比异步/await更好。

简单地等待
getData
重定向域
必须是
异步

-export const redirectDomain: any = (lang, ctx, res) => {
+export const redirectDomain: any = async (lang, ctx, res) => {
    let redirectString;

    const getData = async () => {
        try {
            const response = await fetch('https://www.example.com');
            const data= await response.json();

            return data;
        } catch (error) {
            console.log('[ERROR]');
        }
    };

-   const data = getData();
+   const data = await getData();
    const redirectUrl = data.split(',');

    return redirectUrl;
};

由于数据未定义,因此出现此错误

尝试
axios
library,以替代获取

const resp = axios.get('https://www.example.com');

返回相应的数据

您必须
const data=wait getData()
。。。虽然我希望错误更像是
data.split不是一个函数
你不需要等待
getData()
,因为它是异步的吗?@PatrickRoberts但是错误是正确的,评估
(未定义)。a()
在我的控制台中给出
未捕获类型错误:无法读取未定义的属性“a”
@DevanshJ您应该评估的是
const data=new Promise(()=>{});data.split()
-export const redirectDomain: any = (lang, ctx, res) => {
+export const redirectDomain: any = async (lang, ctx, res) => {
    let redirectString;

    const getData = async () => {
        try {
            const response = await fetch('https://www.example.com');
            const data= await response.json();

            return data;
        } catch (error) {
            console.log('[ERROR]');
        }
    };

-   const data = getData();
+   const data = await getData();
    const redirectUrl = data.split(',');

    return redirectUrl;
};
const resp = axios.get('https://www.example.com');