Wednesday, 2 January 2019

Why does firestore / AngularFire SDK packs multiple promises to one request?

Here is how I write a document and it's subcollections:

 public async setEvent(event: EventInterface): Promise<void[]> {
    return new Promise<void[]>(async (resolve, reject) => {
      const writePromises: Promise<void>[] = [];
      event.setID(event.getID() || this.afs.createId());
      event.getActivities()
        .forEach((activity) => {
          activity.setID(activity.getID() || this.afs.createId());
          writePromises.push(this.afs.collection('events').doc(event.getID()).collection('activities').doc(activity.getID()).set(activity.toJSON()));
          activity.getAllStreams().forEach((stream) => {
            this.logger.info(`Steam ${stream.type} has size of GZIP ${getSize(this.getBlobFromStreamData(stream.data))}`);
            writePromises.push(this.afs
              .collection('events')
              .doc(event.getID())
              .collection('activities')
              .doc(activity.getID())
              .collection('streams')
              .doc(stream.type) // @todo check this how it behaves
              .set({
                type: stream.type,
                data: this.getBlobFromStreamData(stream.data),
              }))
          });
        });
      try {
        await Promise.all(writePromises);
        await this.afs.collection('events').doc(event.getID()).set(event.toJSON());
        resolve()
      } catch (e) {
        Raven.captureException(e);
        // Try to delete the parent entity and all subdata
        await this.deleteEvent(event.getID());
        reject('Something went wrong')
      }
    })
  }

However when I look at the network tab:

enter image description here

I see one request firing up, well ok so far , req_0 data is my activity but looking further on the same request I can see:

enter image description here

So it adds more data and that should not happen because: a) I pass the size of the request to the firestore (1mb) b) due to slow connection I pass the time limit to write.

Most interesting is that this behavior happens when I have a slow network.

EDIT: Here is the payload of the request example:

enter image description here

Anyone, to explain why this?



from Why does firestore / AngularFire SDK packs multiple promises to one request?

No comments:

Post a Comment