funciones - ¿Devuelve el valor del método de JavaScript asíncrono?
funciones asincronas jquery (2)
Este es el problema con las devoluciones de llamada. La ''respuesta'' va a suceder más adelante en otro momento y no durante la evaluación del método. Poco uso haciendo un regreso aquí.
Su devolución de llamada necesita manejar el valor de retorno para que el código parezca más complicado:
reader.onload = function(e) {
// handle here the result
// do something with e.target.result
};
Me encontré con un problema donde parece que no puedo obtener un valor de un método de JavaScript asíncrono que estoy ejecutando en Jquery. Mi Jquery se ve así:
$(document).ready( function() {
$(''#splash_image_upload'').change( function() {
var file = this.files[0];
var blob_string = create_blob(file);
alert(blob_string);
});
Puedo acceder al valor que proviene del evento ''onload'', pero parece que no puedo devolver el valor real. He intentado esto: `
function create_blob(file) {
var reader = new FileReader();
reader.onload = (function() { return function(e) { return e.target.result; }; })();
reader.readAsDataURL(file);
}
Cada vez que ejecuto esta función, el valor de la variable ''blob_str'' es ''indefinido'', presumiblemente porque la asignación se realiza antes de que la función haya terminado. No estoy muy seguro de cómo hacerlo. ¿Hay alguna manera de que pueda devolver este valor desde esta función?
Su mejor create_blob
es pasar una devolución de llamada a create_blob
y dejar que la devolución de llamada haga lo que sea necesario hacer, algo como esto:
create_blob(file, function(blob_string) { alert(blob_string) });
function create_blob(file, callback) {
var reader = new FileReader();
reader.onload = function() { callback(reader.result) };
reader.readAsDataURL(file);
}
Este tipo de trapacería es bastante estándar con llamadas asincrónicas (AJAX en particular). Podrías conectar un frágil desorden de temporizadores en un intento de fuerza sincrónicamente, pero luchar contra el estilo natural de una API es una batalla perdida.