Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago

Ajustar List.Generate Code para limitar el bucle

Tengo el siguiente código:

    Pages = List.Generate(() => 
            CallAPI(endpoint, "1"),
            each HasContToken(Value.Metadata(_)),
            each try CallAPI(
                        endpoint, 
                        Text.Split(Text.Split(Value.Metadata(_)[next_page], "?page="){1}, "&"){0}
                    ) 
            otherwise null
        ),

Sé que el paso de condición es verificar si existen ciertos metadatos. Eso funciona bien para mi consulta final. Pero para fines de prueba, no quiero que se repita hasta que la comprobación de metadatos devuelva false. Solo quiero que se repita diga x cantidad de veces y luego termine.

Intenté cambiar la condición a cada _ <10, pero solo gira en la evaluación al ejecutar.

1 Reply

  • Hola

    Pruebe algo en este sentido:

    Pages = List.Generate(
    	() => [APIResult = CallAPI(endpoint, "1"), Counter = 1],
    	each [Counter] < 10,
    	each
    	  [
    		APIResult =
    		  try CallAPI(
    			endpoint, 
    			Text.Split(Text.Split(Value.Metadata([APIResult])[next_page], "?page="){1}, "&"){0}
    		  )
    		  otherwise null,
    		Counter = [Counter] + 1
    	  ],
    	each [APIResult]
      ),
    • La idea básica es cambiar los argumentos "inicial" y "siguiente" para que devuelvan registros que contengan dos campos, APIResult y Counter.
    • En el argumento "condición", se puede hacer referencia a [Contador] como un campo.
    • En el argumento "siguiente"
      • También se hace referencia a [Contador] para incrementarlo.
      • La referencia a _ se cambia a [APIResult] ya que solo queremos ese campo.
    • A continuación, se agrega un 4º argumento "selector" a List.Generate que selecciona [APIResult] como el valor que se devolverá realmente como un elemento de la lista.

    ¡Espero que lo anterior funcione y no haya cometido errores de sintaxis!

    Saludos

    Owen