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