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();