JSFiddle - React, Tailwind, and code Playground
by dušan roštár
HTML
<button id="resolve">click to resolve</button>
<br><br>
<button id="reject">click to reject</button>
<br><br>
<button id="fn">click for sync fn</button>
JavaScript
const AsyncFunction = Object.getPrototypeOf(async function () { }).constructor;
function awaitFromString(handler) {
return new Promise((resolve, reject) => {
new AsyncFunction('resolve', 'reject', `try { await ${handler}; resolve(); } catch (e) { reject(e); }`)(resolve, reject);
});
}
document.getElementById('resolve').addEventListener('click', async () => {
await awaitFromString("setTimeout(() => { console.log('Delayed for 1 second.'); }, 1000)") });
document.getElementById('reject').addEventListener('click', async () => {
await awaitFromString("setTimeout(() => { throw new Error('something happened') }, 1000)") });
document.getElementById('fn').addEventListener('click', async () => {
await awaitFromString("console.log('hi from standard good old fn');") });