JSFiddle - React, Tailwind, and code Playground

by Pankaj Kargirwar

JavaScript

class Stream {


  constructor() {
    console.log('constructor')
    this.promises = []
    this.index = 0

    setTimeout(() => {
      let d = new Date()
      let callbacks = this.promises.shift()
      callbacks[0](d.getTime())
      
    }, 1)

    setTimeout(() => {
      let d = new Date()
      let callbacks = this.promises.shift()
      callbacks[0](d.getTime())
      
    }, 2)

    setTimeout(() => {
      let d = new Date()
      let callbacks = this.promises.shift()
      callbacks[0](d.getTime())
      
    }, 3)
  }

  get() {
    return new Promise((res, rej) => {
      this.promises.push([res, rej])
    })
  }
}

let s = new Stream()
readAll();

async function readAll() {
  for (let i = 1; i <= 3; i++) {
    console.log(await s.get())
  }
}