如何以角度解决区域感知承诺?

时间:2020-11-02 04:17:55

标签: javascript angular

如何防止角度感知区域承诺?

以下代码返回ZoneAwarePromise


    const versions = await itemDetails.imageSamples.map(({ item, images }) => {
      const mapped = Promise.all(
        images.map((image) =>
          this.pushImage(image, `items/${id}/images/`)
        )
      );


      return { item, images };


    });

// here I'm mapping twice. & I suspect this double mapping is causing the Zone Aware Promise

// I tried this way also:


    const versions = await Promise.all( itemDetails.imageSamples.map(({ item, images }) => {
      const mapped = Promise.all(  ---> // this inside mapping is causing zone  aware promise
        images.map((image) =>  
          this.pushImage(image, `items/${id}/images/`) 
        )
      );


      return { item, images };


    }));

以下代码正确返回了承诺(即没有任何区域感知承诺)。

    const samples = await Promise.all(
      itemDetails.samples.map((sample) =>
        this.pushImage(sample, `items/${id}/samples/`)
      )
    );

// here I'm mapping only once. So there is no Zone Aware Promise.

这是推送图像异步功能。

  async pushImage(image, basePath) {
    const imgId = this.angularDatabase.createPushId();
    const route = `${basePath}${imgId}`;
    const imageRef = this.angularFireStorage.ref(route);
    
    return await concat(
      imageRef.put(image.image).snapshotChanges().pipe(ignoreElements()),
      defer(() => imageRef.getDownloadURL())
    )
      .pipe(
        map(
          (url) => (
             { ...image, url }
          )
        )
      )
      .toPromise();
  }

所以看来两次映射正在制造问题

有人可以建议解决方法吗?

更新

const promises = Promise.all(
      itemDetails.promises.map(({ details, images }) => ({
        details,
        images: Promise.all(
          images.map((image) =>
            this.pushImage(image, `items/${id}/images/`)
          )
        ),
      }))
    );

0 个答案:

没有答案