reaccionar: espere a que se eliminen los efectos secundarios antes de desmontar el componente

¿Hay alguna forma de esperar useEffecta que finalice la función de limpieza?

useEffect(() => {
    return async () => {
      dialog({show: true, title: 'Cleaning up the mess. Please wait.'});

      // Start a series of long time tasks
      await system.killProcess();
      await pollUntilProcessDoesNotExist(); // Do not go anywhere until this is done

      dialog({show: false, title: undefined });      
    };
  }, [selectedSequenceId]);

Mi pregunta surge como resultado del manejo del estado cuando las tareas BE toman mucho tiempo.

En mi ejemplo, tenemos un systemque realiza operaciones de larga duración. Al realizar una operación de larga duración no puede realizar ninguna otra. Intentar hacer systemotras cosas aparecerá como errores 409. Debido a esto, me gustaría saber si podemos esperar hasta que se realice una función de limpieza. Si no es posible, usaría una ruta de transición para esperar allí hasta que systemesté libre.

Más ideas son muy bienvenidas.

Answer

En general, no desea bloquear el desmontaje de la interfaz de usuario, lo que me dice que desmontar es la dependencia incorrecta para el efecto que ha descrito. ¿Qué es lo que provoca el desmontaje? ¿Presionar el botón Atrás o algo así? En cambio, ese botón debería iniciar la tarea de ejecución prolongada y luego realizar la navegación.