首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角7-同步http请求

角7-同步http请求
EN

Stack Overflow用户
提问于 2019-03-17 13:30:06
回答 1查看 524关注 0票数 0

我从wordpress中收集数据,并在按钮单击后使用几个请求将它们推送到数组中,该按钮运行initGetComments()函数。

数组:

代码语言:javascript
复制
  singleCommentResults: CommentsItem[] = [];
  commentsResults = [];

Init函数:

代码语言:javascript
复制
  initGetComments(){
    var btn = document.getElementById("comment_btn");

    if (!btn.classList.contains('clicked')){
      var posts = document.getElementsByClassName('single-post');

      for( var i = 0; i < posts.length; i++ ) {
        this.getComments(posts[i].id).subscribe(data => {
          this.singleCommentResults = data;
          this.commentsResults.push(this.singleCommentResults[0]);
          console.warn("commentsResults =", this.commentsResults);
        })
      }
    } else {
      console.log('Comments already downloaded!')
    }

    btn.classList.add("clicked");
  }

获取函数:

代码语言:javascript
复制
  getComments(ID:string): Observable<CommentsItem[]> {
    console.log(ID);

    return this.http
      .get(`https://public-api.wordpress.com/rest/v1/sites/en.blog.wordpress.com/posts/${ID}/replies/?number=1`)
      .map(res =>
        res.comments.map(
          item =>
            new CommentsItem(
              item.post.ID,
              item.ID,
              item.author.name,
              item.author.avatar_URL,
              item.date,
              item.raw_content
            )
        )
      );
  }

此时此刻,所有这些请求都是在“同时”发送的,我想在前面的请求完成后发送其中的每一个请求。

EN

回答 1

Stack Overflow用户

发布于 2019-03-22 10:45:35

使用递归函数实现它,如下所示:

Init功能:更改

代码语言:javascript
复制
initGetComments(){
    var btn = document.getElementById("comment_btn");

    if (!btn.classList.contains('clicked')){
      var posts = document.getElementsByClassName('single-post');

      // Call to new function to fetch comments for first post
      this.getSyncComment(0, posts)

    } else {
      console.log('Comments already downloaded!')
    }

    btn.classList.add("clicked");
}

同步获取注释的新函数

代码语言:javascript
复制
getSyncComment(n, posts){
    if (n == posts.length) {
    return 
    }


    this.getComments(posts[n].id).subscribe(data => {
        const singleCommentResults = data; // Changed
        this.commentsResults.push(singleCommentResults[0]); // Changed
        console.warn("commentsResults =", this.commentsResults);

        // Make recursive call to fetch comment for next post
        this.getSyncComment(n+1, posts);
      });
  }   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55207592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档