如何从REST API的所有页面获取数据?

时间:2019-08-08 00:15:22

标签: angular typescript django-rest-framework

我已经在应用程序中实现了搜索引擎,我需要获取资源中所有的数据,例如用户的所有帖子。

我的api返回以下示例:

{
    "count": 2,
    "next": "http://127.0.0.1:8000/resource/?page=2",
    "previous": null,
    "results": [
        {
            "resource_data": "data"
        }
    ]
}

我想在我的服务中创建一个方法,该方法返回带有包含所有页面数据的数组的promise。

我对打字稿或javascript的了解有限,我找不到优雅的方式。

解决方案:

使用选定的答案作为最佳答案,我已开发出可用于我的服务的代码

    getAllMDPosts(): Observable<MDPost[]> {
        return this.getRecursivelyMDPosts(`${environment.apiUrl}/mdposts/`);
    }

    private getRecursivelyMDPosts(url: string, results?: MDPost[]): Observable<MDPost[]> {
        if (results === undefined) {
            results = [];
        }
        return this.http.get(url).pipe(
            switchMap(response => {
                    if (response.next) {
                        return this.getRecursivelyMDPosts(response.next, results.concat(response.results));
                    } else {
                        return of(results.concat(response.results));
                    }
            })
        );
    }

我不喜欢三元运算符,通常向条件语句添加更多代码,并且必须修改三元运算符。

1 个答案:

答案 0 :(得分:1)

您要切换到下一页,直到没有更多页面为止

id="mainform"

然后拨打无人接听的电话

from flask import Flask

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    return '''<script>
function formFunc(){
  if (document.getElementById("file").files.length == 0) {
    document.getElementById("mainform").action = "http://localhost:5000/nofiles";
  } else {
    document.getElementById("mainform").action = "http://localhost:5000/containsfiles";
  }
}
</script>

<form onclick="formFunc()" id="mainform" method="POST" action="" enctype="multipart/form-data">
   <input type="file" id="file" name="file" />
   <input type="submit" />
</form>'''

app.run()