Desarrollo y Mantenimiento de Sistemas Informáticos

4º. 1er cuatrimestre. Itinerario de Sistemas de la Información. Grado en Ingeniería Informática. ULL


Organization org   Github Classroom classroom   Campus Virtual campus   Students Activity   Chat Chat

Clase del Miércoles 2022/11/30

Async Programming in JS

Nos quedamos generalizando la función asyncMap para que sea más genérica:

let asyncMap = function(inputs, fun, callback){
    // Write your code here
    for(let i=0; i < inputs.length; i++) {
      fun(inputs[i], (err, data) => {
        /*
        si hubieron errores llamar a callback con el error
        si no si es el último que termina llamara a callback con (null, array de resultados)
        si no hay que guardar el resultado parcial en el array de resultados
        */
      })
    }
}

Tenemos también que generalizar la función de secuencialización para que admita cualquier tipo de función asíncrona y no sólo readFile:

function readFilesSerially(files, callback) {
  let counter = 0;
  let results = [];

  let auxcallback = (err, data) => {
    if (err) {
      callback(new Error("Ocurrió un error! " + err.message))
    }
    else {
      results.push(data)
      counter++;
      if (counter < files.length)
        fs.readFile(files[counter], "utf-8", auxcallback)
      else {
        // se han leido secuencialmente todos los ficheros
        callback(null, results)
      }

    }
  }
  fs.readFile(files[0], "utf-8", auxcallback);

}