【发布时间】:2020-10-09 20:33:44
【问题描述】:
最近遇到了一个异常,我们最终无法解决,但不得不在故障保护中进行编程。
问题是Client.getUserChannelDescriptors() 返回的Paginator 有下一页,但page.items 返回undefined 并且以下while 循环将保留在不定式循环中:
async getAllRoomDescriptors() {
try {
var descPaginator = await TwilioClient.getChannelDescriptors()
var descs = descPaginator.items.concat([])
console.log('descPaginator: ', descPaginator); // Paginator looks normal
// NB! This is infinitive loop!
while (descPaginator.hasNextPage) {
var pag = descPaginator.nextPage() // returns another Paginator (page)
console.log('pag.items: ', pag.items); // returns undefined!!!
descs = descs.concat(pag.items)
}
return descs
} catch (error) {
throw new Error(error)
}
}
为了解决这个不定式循环 和 未定义的页面项,我添加了以下故障保护(阅读技巧)以使其在不理解的情况下工作问题的根本原因。
async getAllRoomDescriptors() {
try {
var descPaginator = await TwilioClient.getChannelDescriptors()
var descs = descPaginator.items.concat([])
var currPage = 0
var maxAllowedPages = 60
while (descPaginator.hasNextPage) {
currPage++
var pag = descPaginator.nextPage()
// 1st sign of trouble if items are undefined
if(!pag.items) break;
descs = descs.concat(pag.items)
// 2nd problem, infintity loop avoidance check
if(currPage >= maxAllowedPages) break;
}
return descs
} catch (error) {
throw new Error(error)
}
}
从 3.3.5 到 4.0.0 的所有 Changelogs 都没有提及它,关于 Paginator 工作方式的文档也没有改变。
有谁知道可能导致此问题的原因。 3.3.5 和 4.0.0 上的行为相同。 此外,这似乎与特定用户隔离,因为我无法在另一个使用较少的频道中重新创建它。这发生在“加载最多”的 Twilio 用户身上。
【问题讨论】:
标签: javascript twilio twilio-programmable-chat