0

I am fairly new to this and aparently i have not understand async calls...

The function below makes in the case of "claimRewards" an Api call. i thought with Async Await the promise resolves to a useable value but instead the function returns a promise like:

amount: Promise {<fulfilled>: '198816.61958'} 

why is this the case. it does not matter if i wrap the async await around the fetchApi function or the transactionCases function, or leave it completely. i suspect im using it wrong but cannot figure out why this is the case! please help & and kind thank you for your advice.

async function transactionCases(cases, data) {
        const url = 'https://api.elrond.com/transactions?withOperations=true&hashes=' + data.txHash;

        switch (cases){
                        case 'claimRewards': 
                            const claimRewards = await fetchApi(url).then(data => {
                                var filtered = data[0].operations.filter(operation => operation.action.includes("addQuantity"))
                                return converttodecimals(filtered[0].value);
                            }); 
                            return claimRewards;
                            break;
                        default: "No Result";
                    }
    }

function fetchApi(url) {
    return fetch(url)
        .then(response => response.json())
        .then(data => data)
        .catch(error => console.log(error));
}
  • An `async function` always returns a promise. You can't change it. `async function() { return 2; }` returns a promise. It's equivalent to `function() { return Promise.resolve(2); }` – jabaa Apr 17 '22 at 20:31
  • "*i thought with Async Await the promise resolves to a useable value*" - it does! `const claimRewards` **is** a usable value (not a promise), since you did `await` the `fetchApi(url)`. Of course, this doesn't make `transactionCases` synchronous, it's still an **`async`** `function`, which returns a promise. You will have to `await` that as well where you call `transactionCases(…)`. – Bergi Apr 17 '22 at 20:47
  • Btw, [drop the pointless `.then(data => data)`](https://stackoverflow.com/q/41089122/1048572), and [avoid `.catch(err => console.error(err))`](https://stackoverflow.com/q/50896442/1048572) – Bergi Apr 17 '22 at 20:48

0 Answers0