Async / await / promises

Hoy he tenido que usar la funcionadlidad de Async de Javascript para resolver un problema complejo en uno de mis programas. Lo he resulto con este código. Creo este artículo para que mi yo del futuro pueda consultarlo. Espero que a alguno de vosotros también os sea de utilidad.

function exampleFun1 () {
  return new Promise(resolve => {
    setTimeout(function () {
      resolve('exampleFun2 done');
    }, 1000);
  });
};

async function exampleFun2 () {
  const promises = [1,2,3,4].map(exampleFun3);
  await Promise.all(promises);
}

async function exampleFun3(item) {
  return new Promise(resolve => {
    setTimeout(function () {
      resolve('exampleFun3 done', item);
    }, 1000);
  });
};

async function updateAllStatus() {
  // Ejecuta estas funciones y espera hasta que terminen
  const await1 = await exampleFun1();
  const await2 = await exampleFun2();

  // Si han terminado sigue la ejecución
  console.log('Todo ha terminado');

  return true;
}