Я пытаюсь изучить разбиение на страницы на основе курсора с помощью Slack API. Моя цель — вернуть массив всех сообщений с помощью метода channel.history.
У меня есть функция рекурсивной выборки javascript, но я не могу заставить локальную переменную "final" правильно вернуться.
Часть, в которой он регистрирует «успешные результаты разбивки на страницы», регистрирует и возвращает массив, как и ожидалось, с длиной 204.
Когда "final" вызывается за пределами этой области, длина равна 0.
Я пытался поэкспериментировать с тем, где я возвращаю переменную final, но не могу заставить ее работать. Я думаю, что это связано с тем, что функция обратного вызова не используется, но я не знал, где это реализовать.
Вот что у меня есть (с удаленным токеном Slack).
function paginate() {
let final = [];
let selectChannel = function(ts) {
fetch('https://slack.com/api/channels.history?token=MY_TOKEN&channel=C6W9FH2S0&latest=' + ts)
.then(response => response.json())
.then(responseData => {
let messages = responseData.messages;
if (!responseData.has_more) {
final.push.apply(final, messages);
console.log('Pagination results successfull, 204 items in the array!', final);
return final;
} else {
final.push.apply(final, messages);
selectChannel(messages[messages.length - 1].ts);
}
return final;
})
.catch(error => {
console.log('Error fetching and parsing data', error);
});
}
selectChannel(new Date());
// Returning as 0, when I am expecting 204
console.log("Final Output", final.length);
return final;
}
var x = paginate();
// By extention, this is returning as 0, when I am expecting 204 as well
console.log("Output", x.length);
final
— очень-очень плохое имя для переменной. - person Sainan   schedule 24.09.2017