javascript - 使用 Promise 调用分页 API

标签 javascript recursion typescript pagination promise

我想使用 Promise 调用分页 API。有多少页可用的信息一开始并不知道,但会在每次响应时传递。详细来说我正在调用Jira search ,分页信息部分如下所示:

{
    "startAt": 0,
    "maxResults": 15,
    "total": 100000,
    ...
}

我用递归解决了分页的处理,这是我在 Typescript 中的解决方案:

search(jql: string, fields: string[] = [], maxResults = 15) : Promise<JiraIssue[]> {
    // container for the issues
    let issues: Array<JiraIssue> = new Array<JiraIssue>();

    // define recursive function to collect the issues per page and
    // perform a recursive call to fetch the next page
    let recursiveFn = (jql: string, fields: string[], startAt: number, maxResults: number) :
        Promise<JiraIssue[]> => {
        return this
            // retrieves one page
            .searchPage(jql, fields, startAt, maxResults)
            .then((searchResult: JiraSearchResult) => {
                // saves the result of the retrieved page
                issues.push.apply(issues, searchResult.issues);
                if (searchResult.startAt + searchResult.maxResults < searchResult.total) {
                    // retrieves the next page with a recursive call
                    return recursiveFn(jql, fields,
                        searchResult.startAt + searchResult.maxResults,
                        maxResults);
                }
                else {
                    // returns the collected issues
                    return issues;
                }
            })

    };

    // and execute it
    return recursiveFn(jql, fields, 0, maxResults);
}

但是,我不喜欢递归方法,因为这仅适用于小型结果集(我担心堆栈溢出)。您将如何使用非递归方法解决这个问题?

最佳答案

这不是实际的递归,并且不存在堆栈溢出危险,因为该函数是在 then 处理程序内调用的。

关于javascript - 使用 Promise 调用分页 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37252673/

相关文章:

c# - 如何更新 GridView 页脚模板中标签的值?

JavaScript 正则表达式 - 通过正则表达式模式将字符串拆分为数组

asp.net-mvc - 从递归模型创建表单

php - PHP的递归删除目录功能?

inheritance - 在 typescript 中使用具有不同 namespace 的接口(interface)

typescript - TS2304 :Cannot find name 'btoa'

javascript - 有没有办法在不刷新页面的情况下上传和预览 div 上的图像(替换背景图像)?

javascript - 如何在 jquery 自动完成的 onkeyup 事件中添加自定义新选项

windows - 如何在 lua 中递归遍历 Windows 注册表?

Angular - HostListener 指令和传递值