<andres-carmona />

TIL #11: Symbol.asyncIterator
First published on
on html, javascript

Symbol.asyncIterator

Estoy re-leyendo algunas partes de la referencia de Javascript en la MDN y me encuentro con varias características de Javascript que para mi eran desconocidas y que son muy interesantes.

En este caso, un objeto con una propiedad tipo Symbol.asyncIterator que a la vez es un generador que puede producir (yield) un resultado, que después se usa un ciclo for await. ¡Simplemente genial!.

const delayedResponses = {
  delays: [500, 1300, 3500],

  wait(delay) {
    return new Promise((resolve) => {
      setTimeout(resolve, delay);
    });
  },

  async *[Symbol.asyncIterator]() {
    for (const delay of this.delays) {
      await this.wait(delay);
      yield `Delayed response for ${delay} milliseconds`;
    }
  },
};

(async () => {
  for await (const response of delayedResponses) {
    console.log(response);
  }
})();

// Expected output: "Delayed response for 500 milliseconds"
// Expected output: "Delayed response for 1300 milliseconds"
// Expected output: "Delayed response for 3500 milliseconds"

Cada vez que aprendo algo nuevo como esto siento como mi cerebro libera esa dopamina 🧠🤤.