es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Promesas secuenciales en typescript

Tengo una clase en Typescript con un método de guardar, y quiero que la próxima llamada al método de guardar ocurra solo una vez que se haya completado la primera. Imagina el siguiente caso:

count = 0;
async save() {
    let x = this.count++;
    console.log("start " + x);
    await axios.post("***",{});
    console.log("end " + x);
}

En este caso, cuando el usuario llama a save sin esperarlo, es posible que la segunda llamada ocurra antes de que se complete la primera, lo que puede causar todo tipo de problemas.

La solución que se me ocurrió es la siguiente:

lastSave = Promise.resolve();
count = 0;
async save() {
  this.lastSave = this.lastSave.then(async () => {
    let x = this.count++;
    console.log("start " + x);
    await axios.post("***",{});
    console.log("end " + x);
  });
}

¿Es esta una solución válida o hay una mejor manera?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo hacer comentarios subjetivos sobre la calidad de tu solución. Sin embargo, tu solución parece válida y cumple la tarea de asegurar que la siguiente llamada al método save solo ocurra una vez que la primera se haya completado. Al utilizar una variable lastSave para realizar un seguimiento de la promesa de guardado anterior y encadenar la nueva promesa de guardado a ella utilizando .then(), te aseguras de que cada llamada al método save se ejecute después de que se haya completado la anterior. Este enfoque también evita condiciones de carrera y posibles errores que podrían ocurrir cuando se ejecutan múltiples llamadas de guardado simultáneamente.

Comments are closed.