la solución que implementas es practicamente lo mismo. pero de igual forma parece que no haz entendido lo que quise señalar. te muestro una imagen de más o menos el flujo de tu código inicial. esta compuesta por tres columnas: inicio, ciclo 1 y ciclo 2. el código representa una versión bien reducida de lo que tenías. el texto en rojo es la porción de código que se interpreta en ese ciclo, el texto en verde es el valor que devuelve el ciclo, y la línea que conecta las diferentes secciones es el punto en que activa las distintas secciones. como podrás analizar, en el
ciclo 1 se asume que la condición es cierta y por tanto vuelve a invocar la misma función. en el
ciclo 2 se asume que la condición evalua a falso y por tanto devuelve un valor. nótese particularmente en el
ciclo 1 cuando recibe el valor de
ciclo 2, este no hace ninguna operación adicional con el valor recibido. por tanto,
ciclo 1 continua la interpretación saltando
else y finaliza porque no hay más instrucciones. como la función no devuelve explicitamente un valor, automáticamente devuelve
undefined al proceso que lo invocó. lo que te quise explicar antes fue que tenías que devolver ese valor que (en este ejemplo hipotético)
ciclo 1 recibe de
ciclo 2. es decir, ubicarle un
return de esa invocación:
return fn().
NOTA 1: ahora no vayas a cambiar el código actual, porque tal como lo tienes es practicamente lo mismo a lo que te quise decir. aunque, deberías hacer la variable nuevo_id local.
NOTA 2: puede que la imagen se vea pequeña, pero si abres la imagen en una pestaña sola lo verás en tamaño normal.