modules/outilsDom.js

/**
 * Attend qu'un id soit présent dans le dom
 * @param {string} id
 * @param {number} timeout Temps max d'attente (en s) avant de rejeter la promesse
 * @return {Promise<HTMLElement, Error>}
 */
export function waitFor (id, timeout = 30) {
  return new Promise((resolve, reject) => {
    const found = () => {
      const elt = document.getElementById(id)
      if (elt) {
        clearTimeout(timer)
        resolve(elt)
        return true
      }
      return false
    }
    const abort = () => reject(Error(`Pas trouvé #${id} dans le dom après ${timeout}s d’attente`))
    const timer = setTimeout(abort, timeout * 1000)

    if (!found()) setTimeout(found, 250)
  })
}