0

Quería saber si alguien me podría ayudar a comprender el funcionamiento de esta función callback, estoy aprendiendo sobre este tema y se me es algo confuso en determinadas situaciones. La duda puntual es que hace la función getResults(), no logro entender el console.log en el que al final se llama al parametro results, ¿de donde saca ese valor?, al finalizar el codigo se llama a otro console.log en el que se pasa el valor de query y se pasa la funcion callback, pero a esta ultima no se le pasa ningun argumento, por eso no logro comprender bien de donde saca el valor de results, espero se logre entender mi pregunta, gracias.

let serverRequest = (query, callback) => {
    setTimeout(() => {
        let response = query + "full!";
        callback(response);
    }, 500);
}

let getResults = (results) => {
    console.log("Response from the server: " + results);
}

console.log(serverRequest("The glass is half ", getResults));
Israel-ICM
  • 3,258
  • 17
  • 15
  • 25
Agusavendaño
  • 303
  • 1
  • 8
  • No lo coloco como respuesta debido a que no estoy seguro, pero como tal cuando a getResults le asignas results. este va a mostrar lo que contenga getResults , como tal la función callback la haces cuando haces "=>" eso es el callback, visto de otro modo seria como retornar el valor, pero no es como la función return, es la respuesta que se genera a una petición dicho de mejor manera. – Miguel Clavijo Dec 16 '19 at 15:27

2 Answers2

4

Vayamos por parte, primero analizamos el serverRequest()

let serverRequest = (query, callback) => {
    setTimeout(() => {
        let response = query + "full!";
        callback(response);
    }, 500);
}

El método serverRequest(), recibe como parámetro una "query" y un "callback", a primera vista no dice mucho, pero analizando el código, podemos ver que la query es un string y callback es una función. Tengamos esto en mente para los pasos siguientes.


Ahora analicemos getResults()

let getResults = (results) => {
    console.log("Response from the server: " + results);
}

El método getResults (), recibe como parámetro un "results" y lo imprime, aca es donde se te presenta el problema, y te propongo que re nombremos results por "response" para que la imagen mental de flujo te sea mas sencilla.


Ahora analicemos el llamado de la función serverRequest()

console.log(serverRequest("The glass is half ", getResults));

Como habíamos dicho, serverRequest recibe un string y una función, lo cual se cumple en este caso. La función que recibe en este caso es getResults, que espera un parámetro, un dato a tener en cuenta es que getResults no tiene los paracentesis "()", lo cual indica que no se ejecuta en esa linea, sino que se pasa la función como referencia.

Luego dentro de serverRequest el parámetro pasa a llamarse "callback" pero por detrás sigue siendo getResults, por lo que al momento de hacer callback(response); le estas pasando el parámetro "response" a getResults y ejecutándola.

Federico Madoery
  • 2,858
  • 9
  • 19
1

serverRequest y getResults son variables declaradas como funciones ejecutadas por el último console.log donde todo comienza mandando dos parámetros 1. Un string constante 2. Una función callback que recibirá de parámetro results, pero para que funcione como callback en una sola linea debe ir sin parámetros.

Cuando se ejecuta serverRequest obtiene los dos parámetros pero concatena el string recibido con "full" para posteriormente mandarla como parámetro al callback, que en realidad es getResults

Al final es como si se ejecutara

getResults("The glass is half full!")

Y de ahi obtienes el parámetro para la función arrojando el siguiente resultado

"Response from the server: The glass is half full!"
Jonathan Orta
  • 3,040
  • 2
  • 5
  • 10