我试图学习与Slack的API基于光标的分页。我的目标是使用channel.history方法返回所有消息的数组。从递归获取请求数组不正确返回
我有一个javascript递归获取函数,但我似乎无法得到本地变量“最终”,以正确返回。
其中它记录“分页结果成功的”正在记录和返回数组作为具有204
当“最终”在该范围之外的被调用时,长度为0
长度预期的部分我试过试验我在哪里返回变量final,但似乎无法得到它的工作。我认为这与不使用回调函数有关,但我不确定在哪里实现。
这是我的(我的松弛令牌删除)。
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);
fetch is async ... – Hitmands
'final'对于一个变量来说是一个非常非常糟糕的名字。 – timmyRS
不够公平,它是一个实验项目,所以我没有把时间放在变量命名上。产出很可能是一个更好的主意。我认为那是解决异步方面的问题。也为快速回复ty。 – DJBrandoK