async function render(...args: Array) { const strings = args[0]; const params = args.slice(1); const results = await Promise.allSettled(params.map(param => typeof param === 'function' ? param() : param)); return strings.map((str: string, i: number): string => { const result = results[i]; if (result == null) return str; return str + (result.status === 'fulfilled' ? result.value : result.reason); }).join(''); } const variable = 5; const result = await render` ${() => 'Title'}

${async () => new Promise(res => setTimeout(() => res('Hello World!'), 1000))}

${async () => new Promise((_, rej) => setTimeout(() => rej('error'), 1500))}

${variable}

`; console.log(result);