GOOGLE ADS

miércoles, 20 de abril de 2022

¿Por qué la función en un bucle funciona solo una vez?

Estoy trabajando en una barra de progreso con Google App Script y JQuery. Cuando hago clic en enviar, se ejecuta el siguiente código:

 var i=0;
while (i<100){
var prog=google.script.run.countTime();
i+=prog;
button.progressIncrement(i);
}

La barra de progreso solo se alimenta al 10% y la ejecución se detiene.

La función contarTiempo() no es muy importante (solo devuelve 10 por el momento):

function countTime(){
return 10;
}

Pero si elimino la función, funciona (100%):

 while (i<100){
var prog=10;
i+=prog;
button.progressIncrement(i);
}

Si elimino mi bucle y escribo algo como esto:

 var i=0;
var prog=google.script.run.countTime();
i+=prog;
button.progressIncrement(i);
var prog=google.script.run.countTime();
i+=prog;
button.progressIncrement(i);
var prog=google.script.run.countTime();
i+=prog;
button.progressIncrement(i);
var prog=google.script.run.countTime();
i+=prog;
button.progressIncrement(i);
var prog=google.script.run.countTime();
i+=prog;
button.progressIncrement(i);
(....)

La barra de progreso también funciona al 100%.

¿Qué está mal con la función dentro del tiempo?


Solución del problema

google.script.run() no devuelve un valor, se ejecuta de forma asíncrona. Le pasa una función de devolución de llamada para obtener un valor a través de withSuccessHandler(). Por ejemplo, en el código del lado del cliente:

function onSuccess(valueFromServer) {
// do something with valueFromServer
}
google.script.run.withSuccessHandler(onSuccess).doSomethingServerSide()

Y del lado del servidor:

function doSomethingServerSide() {
return valueFromServer
}

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...