0

tengo un problemilla, tengo un fichero javascript que necesito de varios datos para hacer una llamada api a un fichero php, uno de los datos que necesito, lo obtengo en otra llamada api a otra función php. Por mucho que ponga waits (haciendo la función), no consigo que la segunda función (la que necesito de los datos de la primera), espere a obtener los datos de la primera llamada, de tal forma que hago console.log y veo como primero se ejecuta la segunda función con ese dato vacio, y luego se muestra el dato que se ha recogido de la primera función, por ejemplo.

var primeraVariable = return api.call('GET','/primeraFuncion');

Para la segunda llamada, necesito var primeraVariable

var segundaVariable = return api.call('GET','/segundaFuncion', primeraVariable);

Pues resulta que a la hora de hacer la segunda variable, la variable "primeraVariable" está vacía (suponiendo que se declara al principio y demás, es solo un ejemplo), ya que obtiene el valor mas tarde, y quiero que no se haga la segunda variable hasta que no esté la primera.

Espero haberme entendido.

Saludos.

sdelcueto
  • 3
  • 1
  • puedes usar una [llamada asincrona](https://es.stackoverflow.com/questions/277690/qu%c3%a9-diferencias-hay-entre-callbacks-promises-y-async-await) – Nicolas Oñate Aug 02 '19 at 09:50

1 Answers1

0

Antes que nada decirte que Javascript es un lenguaje de programación asíncrono, o sea, que existe código que tal que

    var valorUno = instruccionUno();
    var valorDos = instruccionDos();
    console.log(valorUno + valorDos);

no te pueda dar seguridad de que instruccionUno() se ejecute antes que instruccionDos. Peor aun, de que tenga sentido la suma de lo que retornen.

No todo es asincrono, pero las llamadas a una api si que lo son.

En tu caso debes hacer, si es que api.call retorna una promesa

api.call('GET','/primeraFuncion').then(function (response) {
   var primeraVariable = response;
   api.call('GET','/segundaFuncion', primeraVariable).then(function (response) {
     var segundaVariable = response;
   });
});

O si acepta un callback debera ser un poco diferente

Te animo a que leas sobre javascript asincrono y callbacks para entender.

Ya si puedes, usar async/await mucho mejor.

Saludos

  • Al final lo arreglé haciendolo que desde php, la llamada "var primeraVariable = return api.call('GET','/primeraFuncion');" la hago internamente desde php sino existe un parametro y me ha funcionado correctamente. No obstante, leeré sobre ello a ver si lo cambio. – sdelcueto Aug 06 '19 at 10:30