Я имею дело с тремя вложенными функциями, и последняя не возвращает список элементов, которые я хочу. Если я регистрирую в консоли результаты последней функции изнутри l oop, я вижу нужные URL-адреса, но только внутри l oop функции. Он не хранит их в списке или JSON ни для чего. Возвращает только пустой список или пустой JSON.
- Первая функция - это просто вызов URL ('/ api / getList'), который работает нормально.
- Вторая функция вызывает последние сообщения со страницы Facebook. Это возвращает идентификаторы постов, и я помещаю их в список просто отлично.
- Третья функция - это еще один вызов Facebook, который использует идентификаторы сообщений для запроса URL-адреса фотографии из указанных сообщений. Это возвращает и консоль регистрирует URL-адреса, но я не могу сохранить их ни к чему. Как ни странно, когда я консоль журнала «я» в последней функции, он возвращает «25» двадцать пять раз. Двадцать пять - это количество сообщений, количество возвращаемых URL-адресов изображений.
Первая функция вызывается один раз. Вторая функция вызывается один раз. Третья функция вызывается двадцать пять раз.
Если вам интересно, почему у меня есть два цикла for, которые должны делать одно и то же, то это потому, что я подумал, что это могло решить проблему. У меня были такие же результаты с одним l oop.
const FB = require('fb')
var image_urls = []
app.get('/api/getList', (req, res1) => {
FB.api('4300000000643', { fields: 'posts' }, function (res2) {
if(!res2 || res2.error) {
console.error(!res2 ? 'error occurred' : res2.error);
return;
}
post_id = res2.posts.data.map(post => post.id)
for (var i = 0; i < post_id.length; i++) {
console.log(i)
FB.api(
"/"+post_id[i]+"/attachments",
function (res3) {
if(!res3 || res3.error) {
console.error(!res3 ? 'error occurred' : res3.error);
return;
}
// this doesn't seem to do anything
image_urls.push(res3.data[0].media.image.src)
// this logs all the URLs I want
// console.log(res3.data[0].media.image.src)
// this logs '25' twenty five times for some reason
console.log(i)
}
);
}
// this returns the array of post ids
console.log(post_id)
// this returns an empty list
console.log(image_urls)
});
});
'FB.api' из библиотеки 'NodeJS для Facebook'
FB.api("/"+post_id[i]+"/attachments",
вызывается в последней функции, которую я получил из документации Facebook здесь. Похоже, она не дает никакой информации о том, какая именно это функция. В пакете Facebook Node нет документации о том, как запрашивать информацию об отдельных сообщениях, которые я видел.
Начиная с Python и будучи новичком в Express / Node, это действительно сбивает с толку, и я буду интересно узнать у вас, что здесь происходит.