Вещи за пределами функции async
не будут ждать разрешения обещания. И поэтому data
все еще undefined
, когда вы split
это. Итак, вот одно из решений ...
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;
};
Другое решение (я бы предпочел это):
export const redirectDomain: any = async (lang, ctx, res) => {
let redirectString;
let data;
try {
const response = await fetch('https://www.example.com');
data = await response.json();
} catch (error) {
console.log('[ERROR]');
}
const redirectUrl = data.split(',');
return redirectUrl;
};
Также, если бы мне пришлось написать этот фрагмент кода (позвольте мне выяснить, как бы я обработал ошибку xD):
export const redirectDomain: any = (lang, ctx, resp) =>
fetch("https://www.example.com")
.then(res => res.json())
.then(data => Promise.resolve(data.split(",")));
Я хотел бы подчеркнуть, что иногда обещания выглядят лучше, чем async / await.