代码之家  ›  专栏  ›  技术社区  ›  Kevin Summersill

异步API请求返回所有结果

  •  -1
  • Kevin Summersill  · 技术社区  · 7 年前

    我试图每次都从api返回所有结果。相反,我的结果各不相同。for循环跳过请求并返回随机数量的返回记录。有人能帮忙吗?

    我试过使用async and await函数。我也尝试过实现这个承诺,但是我认为我没有为api请求正确地设置它。

    // Get all ref codes and group by into an array.
      async getAllRefCodes() {
        const url = `${this.irRefCodes}`;
        const refCodes = [];
        let totalPage = 0;
        const params1 = new HttpParams().set('size', '20').set('page', `0`);
        await this.http.get(`${url}`, {params: params1 }).toPromise().then((data) => {
          console.log(data['page'].totalPages);
          console.log(data['page'].totalElements);
          totalPage = data['page'].totalPages;
        });
        for (let x = 0; x < totalPage; x++) {
         this.getRefCodesByPage(refCodes, url, x);
         console.log('Done');
        }
        await Promise.all(refCodes);
        console.log(refCodes);
      }
    
      // Getting all ref codes from API per page.
      async getRefCodesByPage(refCodes, url, pageNumber) {
        const params = new HttpParams().set('size', '20').set('page', `${pageNumber}`);
        const promise = new Promise ((resolve, reject) => {
          this.http.get(`${url}`, {params: params})
        .toPromise().then((refCodeData) => {
          const refCode = refCodeData['_embedded'].refCodes;
           refCodes.push(...refCode);
        });
          resolve();
          return promise;
        });
        await Promise.all(promise);
      }
    

    希望每次都能拿到所有的唱片。常数

    1 回复  |  直到 7 年前
        1
  •  0
  •   Aragorn    7 年前
    1. 将结构从承诺变为可观察
    2. 在subscribe块中逐页移动for循环以获取ref代码(这是代码i中的主要问题 认为 )

        getAllRefCodes() {
          const url = `${this.irRefCodes}`;
          const refCodes = [];
          let totalPage = 0;
          const params1 = new HttpParams().set('size', '20').set('page', `0`);
          this.http.get(`${url}`, {params: params1 }).subscribe((data) => {
            console.log(data['page'].totalPages);
            console.log(data['page'].totalElements);
            totalPage = data['page'].totalPages;
      
            for (let x = 0; x < totalPage; x++) {
              this.getRefCodesByPage(refCodes, url, x);
              console.log('Done');
             }
      
          });
      
          console.log(refCodes);}
      

      getrefcodesbypage(refcodes,url,页码){ const params=new httpparams().set('size','20').set('page', ${pageNumber} ; 这个。http。get( ${url} ,{params:params}。订阅((refcodedata)=>{ const refcode=refcodedata[“u embedded”]。refcode; refcode.push(…refcode); })

    推荐文章