В настоящее время я разрабатываю веб-приложение, которое использует API-интерфейс Facebook Graph.Как получить все сообщения пользователя через Facebook Graph API, используя обещания и рекурсию?
Что бы я хотел достичь, так это получить все посты пользователя.
Однако это не так просто, так как мне приходится разбивать на страницы результаты.
В настоящий момент я борюсь с обещаниями.
То, что я пытаюсь достичь, - заполнить массив объектами сообщения.
Поэтому я использую обещания и рекурсию, которая не работает должным образом.
Мой код в настоящее время выглядит следующим образом:
// Here I retrieve the user with his or her posts,
// just the first 25 due to pagination
if (accessToken) {
return new Promise(resolve => {
FB.api('/me?fields=id,name,posts&access_token=' + accessToken, response => {
this.get('currentUser').set('content', response);
resolve()
})
})
}
// Returns all posts of a given user
function getAllPostsOfUser(posts, postsArr) {
// Process each post of the current pagination level
for (var post of posts.data) {
// Only store meaningful posts
if (post !== undefined && post.message !== undefined) {
postsArr.push(post)
}
}
// Further posts are retrievalable via paging.next which is an url
if (posts.data.length !== 0 && posts.paging.next !== undefined) {
FB.api(posts.paging.next, response => {
getAllPostsOfUser(response, postsArr)
resolve()
})
}
return postsArr
}
var posts = getAllPostsOfUser(this.get('currentUser').content.posts, [])
// I want to use all the posts here
console.log(posts)
У меня есть проблема в том, что я хочу, чтобы использовать сообщения, где размещена console.log, но при входе в массив сообщений много сообщений отсутствуют ,
Я уверен, что я сделал что-то не так с обещаниями, но я не знаю, что.
Я был бы рад, если бы кто-нибудь мог привести меня к решению.
Заранее спасибо.
Я получаю все сообщения, но его немного странный массив содержит четыре объекта, каждый из которых имеет некоторые из сообщений. – mian
Я вижу, что вы изменили с 'push' на' concat', но я не получаю никаких сообщений с concat, тогда как я делаю это с 'push'. – mian
concat предназначен для объединения массивов. проверьте, что вы получаете с console.log (response.data) прямо перед линией concat. см., если все записи находятся там. Кроме того, вы не получите ВСЕ записи, если ваша временная шкала очень длинная. рано или поздно это может быть проблемой с ограничениями api ... поэтому я установил предел 100 (по умолчанию 25). вы можете позже ограничить количество вызовов API. – luschn