En realidad no sé cuánto tiene que ver mi problema con el threading, pero seguro que no tiene nada que ver con promises xD
La mierda es que tengo una clase implementando Runnable, creo instancias de la clase, arranco los threads de dichas instancias y con un flag termino el run() cuando necesito. Pues cuando creo nuevas instancias de alguna forma se me quedan campos de clase en memoria de instancias anteriores, aunque en teoría el hilo ha terminado y el GC ha limpiado. Mirando con el debugger una de esas instancias, uno de sus campos de clases en un método es un objeto y en otro método es otro objeto, un mierdel enorme vamos
Como el código ya es una puta mierda legacy del 2014 lo voy a solucionar por la rápida metiendo static y haciendo la guarrada mayor
Besis
#37745 Si esa clases es tuya no implementes runable, debería ser calllable
Luego usa futureTask o CompletableFuture, yo trabajo con futures por un motivo que no recuerdo xd
Ahora ando mirando como hacer java reactivo, quiero un observe/observable de toda la vida pero se quee estan deprecated ... Tengo quee meter una librería reactiva externa si o si? Alguna ligera que recomendeis? O me implemento yo la mía sencilla? si es solo para hacer push.. Y actualizar un servicio.. Es súper sencillo..
Gente una consulta de Java.
Tengo que comprobar con regex los campos que vienen en String en una peticion, y luego quiero comprobar los campos Integer, Date y Timestamp por separado, solo viendo si son del tipo correcto.
El problema es que tengo que comprobar 38 campos de la tabla.
Hay alguna forma de no tener que meter montones de ifs para ir comprobando campo por campo?
#37746 Si yo tuviera tiempo refactorizaría toda esta mierda, pero no es el caso y ya he tirado por el camino de la ñapa xd
Runnable era y runnable será
#37748 donde se definen las reglas de las validaciones para los campos?
Si lo tienes así solo debes de hacer un validator:
Modelo Polla
> $size = "Int | min:30"
> $beforeGay = "Int | fixed | 3"
> $validTargets = "regex:/$VISA"
#37750
Te refieres a un hashmap imagino no?
#37751
He de decir que yo de backend no tengo ni idea, pero me ha tocado modificar esto para que no inserten codigo en la base de datos.
Que yo sepa no hay ningun modelo en el proyecto que estoy tocando o yo no se donde esta, solo se la clase que luego se inserta en la base de datos.
Yo estoy mirando directamente en la base de datos que tipo de dato es y el numero de caracteres que permite y si se permite nulo o no.
#37752 pues si no hay validator te toca hacer los putos ifs.
Te recomiendo hacer una validator para la clase, tienes aquí ejemplos:
https://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/validation.html
EDIT: Oh shit, tienes que validar los datos que coges de la db? Que cojones? xd
La base de datos debe de ser siempre "trust source", si se deja insertar datos erróneos esta todo mal desde el principio xD
#37748 Como ya te ha dicho @poyer ( @Troyer ), tienes que hacer varios validadores, uno por cada tipo a revisar (Integer, LocalDate, etc)
Luego los usas en el modelo y en combinación con la anotación Valid ya se encargaría el fw de hacer la validación. También deberías hacer la validación en las entidades.
Esto asumiendo que estas trabajando con Spring, claro.
Tengo una lista de elementos que son una "url" y su icono correspondiente, estaría bien guardarlos en un map usando la url como key y el icono como value de cara a trabajar con ellos más fácil? (En este caso insertarlos en html)
#37723 pue e fasil julio
const = async () => {
const = await FuncionQueDevuelvePromesa()
return // existe porque con await esperas a que se resuelva la promesa, pa bien o pa mal (Si tienes un catch)
}var pato = ()
console.log(pato) // Pato aun es una promesa pendiente, porque es asincrona y se esta resolviendo en otro hilo de ejecucion// para tener pato disponible en el console log tendrias que encapsularlo en otra funcion asincrona
const = async () => {
var pato = await ()
console.log(pato)
}console.log(()) // imprime promesa
#37759 Si ya los tienes en un listado con su url y su icono, para que quieres volver a mapearlos para tener algo que ya tienes ?
#37765 Como que index * 1000? Ahí imprimes em index 0 en 0 segundos, el 1 en 1 segundo, el 2 en 2 segundos...
Tiene que ser toda la cadena en 1 segundo.
Extendiendo un poco la explicación de #37762, cuando necesitéis esperar a que varias promises se resuelvan antes de llegar a un punto, podéis usar este truco:
// Funciones asíncronas de ejemplo
const promiseFunc1 = async () => { /* cosas asíncronas 1 */ }
const promiseFunc2 = async () => { /* cosas asíncronas 2 */ }
const promiseFunc3 = async () => { /* cosas asíncronas 3 */ }
Workaround 1: lanzar todas las funciones a la vez y esperar de forma síncrona a que todas se satisfagan:
const resultado = await Promise.all( [promiseFunc1(), promiseFunc2(), promiseFunc3()] );
// esta línea se ejecutará cuando se hayan satisfecho las promises.
Workaround 2: lanzar las funciones, continuar el hilo de ejecución debajo, y ejecutar un código determinado cuando estas finalicen:
Promise.all( [promiseFunc1(), promiseFunc2(), promiseFunc3()] ).then( (res) => {
// movidas que quieras hacer cuando se satisfagan las promises
});
// código que quieres que se ejecute sin esperar a que se resuelvan las promises
edit: De hecho, a los que trabajéis en servidores de Node, y tenéis que establecer dos hilos de ejecución distintos (uno para consumir los datos recibidos en las promises, y otro independiente de estos resultados, similar a lo que sucede en el workaround 2), hasta podéis spawnear un child process (lo que viene a ser concurrencia de toda la vida) en el cual realicéis y consumáis dichas peticiones. Documentación aquí; yo lo he probado y va perfectamente en las últimas versiones de Node.