JSFiddle - React, Tailwind, and code Playground
by Mike McCaughan
JavaScript
async function foo(str) {
return new Promise((resolve) => {
setTimeout(() => resolve(str.toUpperCase()), 1000);
});
}
function getPromiseOfValue(maybePromise) {
return Object.prototype.toString.call(maybePromise).includes('Promise') ?
maybePromise :
Promise.resolve(maybePromise);
}
async function resolveTemplate(strings, ...maybePromises) {
const promises = maybePromises.map(maybePromise => getPromiseOfValue(maybePromise));
const values = await Promise.all(promises);
return strings.map((str, i) => [str,values[i]]).flat().join('');
}
async function bar() {
const str4 = 'resolveTemplate`${foo("xxx")}`';
console.time("complete");
console.log("STR4:", await eval(str4));
//Output STR4: XXX
console.timeEnd("complete");
}
bar();