【问题标题】:Twilio Chat getChannelDescriptors() paginator page items undefinedTwilio Chat getChannelDescriptors() 分页器页面项目未定义
【发布时间】: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


    【解决方案1】:

    您的代码中有错误:descPaginator.nextPage() 返回 Promise,因此您必须再次使用 await。像这样的:

    while (descPaginator.hasNextPage) {
      descPaginator = await descPaginator.nextPage();
      //do stuff
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2014-12-29
      • 1970-01-01
      • 2012-02-23
      • 2017-12-13
      • 2013-05-11
      • 1970-01-01
      • 2013-06-21
      • 2019-04-26
      相关资源
      最近更新 更多