Function.InvokeAfter

D

T

The M Code Behind the Power Query M function Function.InvokeAfter

Function.InvokeAfter is one of the useful functions available in M that allows you to delay the execution of a function for a certain amount of time. In this article, we will take a closer look at the M code behind Function.InvokeAfter and explore its use cases.

Syntax of Function.InvokeAfter

The syntax of Function.InvokeAfter is as follows:


Function.InvokeAfter(function as function, delay as duration) as any


The function parameter specifies the function that you want to execute after a delay. The delay parameter specifies the duration of the delay before the function is executed. The result of the function is returned as any.

Examples of Function.InvokeAfter

Here are some examples of how Function.InvokeAfter can be used:

Example 1: Delay Execution of a Function

Suppose you have a function that takes a long time to execute, and you want to delay its execution until after all other functions have finished executing. You can use Function.InvokeAfter to delay the execution of the function as follows:


let

delay = #duration(0, 0, 5, 0), // delay execution for 5 seconds

result = Function.InvokeAfter(() => MyFunction(), delay)

in

result


In this example, we define a delay of 5 seconds using the #duration function. We then use Function.InvokeAfter to delay the execution of MyFunction by 5 seconds. The result of MyFunction is stored in the result variable.

Example 2: Retry a Failed Function

Suppose you have a function that sometimes fails due to network or server issues, and you want to retry the function after a certain amount of time. You can use Function.InvokeAfter to retry the function as follows:


let

maxRetries = 5,

delay = #duration(0, 0, 5, 0), // delay execution for 5 seconds

retryFunction = (retryCount) =>

let

result = try MyFunction() otherwise null

in

if retryCount < maxRetries and result = null then

Function.InvokeAfter(() => retryFunction(retryCount + 1), delay)

else

result,

result = retryFunction(0)

in

result


In this example, we define a maximum number of retries as maxRetries and a delay of 5 seconds using the #duration function. We then define a retryFunction that takes a retryCount parameter and retries MyFunction up to maxRetries times. If MyFunction fails, retryFunction calls itself after a delay using Function.InvokeAfter. The result of MyFunction is returned if it succeeds, or null if it fails after maxRetries retries.

Example 3: Throttle API Requests

Suppose you need to make API requests, but the API has a rate limit that prevents you from making too many requests in a short amount of time. You can use Function.InvokeAfter to throttle the requests as follows:


let

maxRequests = 10,

delay = #duration(0, 0, 1, 0), // delay execution for 1 second

requestFunction = (requestCount) =>

let

result = try APIRequest() otherwise null

in

if requestCount < maxRequests and result <> null then

Function.InvokeAfter(() => requestFunction(requestCount + 1), delay)

else

result,

result = requestFunction(0)

in

result


In this example, we define a maximum number of requests as maxRequests and a delay of 1 second using the #duration function. We then define a requestFunction that takes a requestCount parameter and makes APIRequest up to maxRequests times. If APIRequest succeeds, requestFunction calls itself after a delay using Function.InvokeAfter. The result of APIRequest is returned if it succeeds, or null if it fails after maxRequests requests.

Function.InvokeAfter is a useful function in Power Query that allows you to delay the execution of a function for a certain amount of time. It can be used to delay the execution of a long-running function, retry a failed function, or throttle API requests. By understanding the M code behind Function.InvokeAfter and its use cases, you can become a more proficient user of Power Query.

Power Query and M Training Courses by G Com Solutions (0800 998 9248)

Upcoming Courses

Contact Us

    Subject

    Your Name (required)

    Company/Organisation

    Email (required)

    Telephone

    Training Course(s)

    Your Message

    Upload Example Document(s) (Zip multiple files)