2012-01-17 13 views
5

Necesito que el controlador de eventos devuelva un valor en la función que inicia el evento en primer lugar, solo para devolver el valor que se recibirá solo en el controlador de eventos . Creo que debería haber una forma fácil de lograr esto o atacar el problema desde un ángulo diferente.Devuelve el valor del controlador de eventos a la función principal desde javascript

Lo que en realidad lo que necesito hacer es:

  1. crear un nuevo objeto img DOM para alimentar DataURL en (la DataURL proviene de canvas.toDataURL())
  2. img.onload le permitirá me devuelve el dataURL

Estoy usando jQuery si eso ayuda de alguna manera, pero no tiene que hacerlo, por supuesto.

En mi entender, no puedo confiar en que el img tenga los datos inmediatamente, y se siente estúpido usar tiempos de espera para esperar que el evento se dispare y usar alguna variable global, especialmente porque algunos podrían procesarse en paralelo .

Para obtener más antecedentes, esto es todo para cambiar el tamaño de las imágenes antes de cargarlas (multi-) con el motor HTML5.

Gracias incluso para la lectura, y para algún consejo por supuesto :)

, gracias, Igor

+0

Nada, simplemente escribí el controlador de eventos y luego me di cuenta de que necesitaba el valor en la función "principal". Me doy cuenta de que puedo iterar con tiempos de espera, pero la intuición me dice que debería haber algo más inteligente :) –

+1

Una biblioteca de promesas podría valer la pena investigar: https://github.com/kriskowal/q – thetallweeks

+1

que es una muy antigua, pero podría ser un comentario útil para alguien que tropieza con esta pregunta. Uso Bluebird en estos días por promesas. Al revisar la pregunta me di cuenta de que se habían realizado muchos progresos, gracias @thetallweeks para la actualización del viernes)) –

Respuesta

3

No tiene sentido para el retorno valores de un controlador de eventos. Los eventos suceden cuando suceden, y el navegador llama al controlador en ese momento. Por lo tanto, no hay código esperando ningún valor de retorno; no hay ningún lugar adonde ir.

En su lugar, simplemente haga lo que sea que necesite hacer dentro de el controlador de eventos.

+0

Necesito devolver el valor de la función (F) que construyó el objeto desde el cual se desencadena el evento, para asignarlo a una variable que llamó F en primer lugar. Lo siento si es confuso :) –

+0

Sé lo que dices, pero simplemente no es posible hacer eso. JavaScript en los navegadores web es un entorno asíncrono; no puede hacer que una función "espere" que algo suceda. La forma de estructurar su código, por lo tanto, es abrazar la naturaleza asíncrona, y en lugar de escribir una función que espera un valor de retorno, haga que * pase * una función de manejador propia que será llamada por el manejador "onload" de la imagen. – Pointy

+1

Creo que estoy llegando ... Necesito pasar otro controlador al controlador original para ejecutarlo allí cuando se cargue el img ... –

Cuestiones relacionadas