代码之家  ›  专栏  ›  技术社区  ›  Anuj TBE

如何等待完成订阅,然后再移动到Angular 6中for循环的下一个索引

  •  1
  • Anuj TBE  · 技术社区  · 7 年前

    Angular 6 .

    我有一个链接数组和一个变量,用于按数组的顺序逐个存储获取的信息。

    下面是我想用 for

    products: any;
    processedItems: Array<any> = [];
    
    private _processItem() {
    
      for (let i = 0; i < this.products.length; i++) {
        this.scraperService.scrapSingle(this.products[i].url).subscribe(
          res => {
            if (res.status.http_code === 200) {
              const properties = this.scraperService.processSingleProduct(res.contents);
    
              const p_item = {};
              p_item['info'] = this.products[i];
              p_item['properties'] = properties;
    
              this.processedItems.push(p_item);
            }
            console.log(res);
          }
        );
      }
    
    console.log(this.products.length);
    }
    

    但如何等待呢 subscribe 在移动到循环中的下一个索引之前?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Igor Litvinovich    7 年前

    用承诺代替承诺接收.js使用toPromise方法订阅。你可能需要绘制地图 物件 到json。资源地图(项目=>项目.json());

    products: any;
    processedItems: Array < any > =[];
    
    private _processItem() {
    
        this.products.array.forEach(async (element) => {
            const res = await this.scraperService.scrapSingle(element.url).toPromise();
            if (res.status.http_code === 200) {
                const properties = this.scraperService.processSingleProduct(res.contents);
    
                const p_item = {};
                p_item['info'] = element
                p_item['properties'] = properties;
    
                this.processedItems.push(p_item);
            }
            console.log(res);
        });
    
        console.log(this.products.length);
    }
    
        2
  •  1
  •   Peter Mac    7 年前

    例如,

    this.processedItems.push(p_item);

    this.processedItems.splice(p_item, 0, i);

    这就解决了你的问题:)

    推荐文章