Forum Discussion

PowerUser123's avatar
PowerUser123
Icon for Helper II rankHelper II
4 years ago

Implementing API Delay Function.InvokeAfter

So I have a couple functions that I'm trying to setup a delay using Function.InvokeAfter. I think I'm doing something wrong as I'm still hitting rate limits, and using Fiddler, I can see that there isn't a delay being implemented.

 

First Function PaginateAPI

 

(endpoint as text) =>
let
    HasContToken = (responseHeaders) as logical => if (Record.HasFields(responseHeaders, {"next_page"})) then 
                true
                else
                false,
    
    Pages = List.Generate(() => 
            GetBase(endpoint, "1"),
            each HasContToken(Value.Metadata(_)),
            each try GetBase(
                        endpoint, 
                        Text.Split(Text.Split(Value.Metadata(_)[next_page], "?page="){1}, "&"){0}
                    ) 
            otherwise null
        ),
    List = List.Combine(Pages),
    Table = Table.FromList(List, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
    Table

 

GetBase

let
    Source = (endpoint as text, page as text) =>
let
    url = "https://someapi.com/",
    Source = Json.Document(Web.Contents(url,
    [
        Headers = [
            #"Accept"="application/json",
            #"api-code"="SomeString",
            #"Authorization"="Bearer " & APIKey
        ],
        RelativePath = endpoint,
        Query = [
                    page=page
                ]
    ]
    )),
    next_page = Source[meta][pagination][links][next],
    final = Source[data] meta [ next_page = next_page ]
in
    final
in
    Source

 

I invoke the first Function PaginateAPI as such: 

 

= Function.InvokeAfter(()=>PaginateAPI("sales"), #duration(0,0,0,5))

 

I'm thinking this is all I need to do to create the delay, but it seems like the delay isn't being implemented. Do I also need to add the Function.InvokeAfter somewhere in the functions as well?