Self-Executing Functions

Let's say you wanted to call a function using await (let's call this function get_usd2inr) by calling it as in like - await get_usd2inr();, you may get this error:

Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules (at main.js:15:1)

We solve this using self-executing functions - ()(); with async.

let xe = 0;

const get_usd2inr = async () =>
{
    const url = "https://open.er-api.com/v6/latest/USD";
    try
    {
        const response = await fetch(url);
        const data = await response.json();
        const usd2inr = Number(data.rates.INR.toFixed(2));
        return usd2inr;
    }
    catch (error)
    {
        console.error('Error fetching exchange rate:', error);
        throw error;
    }
}

// self-executing function
(async () =>
    {
        xe = await get_usd2inr();
        console.log(xe); // 86.97 as of 13th February 2025
    }
)();

console.log(xe); // 0 - at this point of time, get_usd2inr() is not yet done executing

In case you prefer a server-side fetch of open.er-api.com if at all they start blocking CORS all of a sudden :

def exchangerate_usd2inr():
    url = "https://open.er-api.com/v6/latest/USD"
    response = requests.get(url)
    usd2inr = response.json()['rates']['INR']
    usd2inr = round(usd2inr, 2)    
    return usd2inr

If you want to look into an example using workers check out a future blog post on using Google’s Comlink.

0
Subscribe to my newsletter

Read articles from Anjanesh Lekshminarayanan directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Anjanesh Lekshminarayanan
Anjanesh Lekshminarayanan

I am a web developer from Navi Mumbai working as a consultant for NuSummit (formerly cloudxchange.io). Mainly dealt with LAMP stack, now into Django and trying to learn Laravel and Google Cloud. TensorFlow in the near future. Founder of nerul.in