Я использую Axios для выполнения запроса GET к Facebook Graph, чтобы получить список страниц Facebook, которыми управляет пользователь.Получив это, я использую for loop
для выполнения другого запроса GET к Facebook Graph для извлечения данных на каждой странице Facebook, которой управляет пользователь.Я делаю это внутри async function
с Promise
в конце, чтобы объединить все данные в один const fbProfile
.
Моя проблема: Я не могу получитьрезультаты вызова Axios в const pages
для заполнения массива pages
.
Мой код ниже:
async function getfbProfile(token) {
try {
const user = await axios.get('https://graph.facebook.com/me', {
params: {
access_token: `${token}`,
fields: 'picture,accounts',
},
});
const pages = await user.data.accounts.data.forEach((err, pageInfo) => {
axios.get(`https://graph.facebook.com/${user.data.accounts.data[pageInfo].id}`, {
params: {
access_token: `${token}`,
fields: 'picture,name',
},
});
});
const fbProfile = await Promise.all([user, pages]);
debug(fbProfile);
} catch (err) {
debug(err.stack);
}
}
Я знаю, что первый вызов проходит, и вызовы цикла forпроходить через.Я проверил работоспособность цикла for call
, изменив const pages
, чтобы он выглядел так, как показано ниже, и убедившись, что оба вызова успешно идут в Facebook Graph.
const pages = await user.data.accounts.data.forEach((err, pageInfo) => {
axios.get(`https://graph.facebook.com/${user.data.accounts.data[pageInfo].id}`, {
params: {
access_token: `${token}`,
fields: 'picture,name',
},
})
.then((result) => {
debug(result);
});
});
Я был бы очень признателен за любую помощь.Я ломал голову над этим последние два дня.Спасибо за любую помощь, которую вы можете оказать.
ОТВЕТ
Спасибо Патрику Робертсу за его помощь.Поскольку я использую профиль ESLint от Airbnb, мне пришлось изменить приведенный ниже пример, чтобы пропустить пометку.Еще раз спасибо!
async function getfbProfile(token) {
try {
const user = await axios.get('https://graph.facebook.com/me', {
params: {
access_token: token,
fields: 'picture,accounts',
},
});
const pages = Promise.all(user.data.accounts.data.map(({ id }) => axios.get(`https://graph.facebook.com/${id}`, {
params: {
access_token: token,
fields: 'picture,name',
},
})));
const fbProfile = await Promise.all([user, pages]);
debug(fbProfile);
} catch (err) {
debug(err.stack);
}
}