Skip to content

Instantly share code, notes, and snippets.

@geelen
Created December 9, 2019 15:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save geelen/ff28a6ed4db1658004f34e4374bc905e to your computer and use it in GitHub Desktop.
Save geelen/ff28a6ed4db1658004f34e4374bc905e to your computer and use it in GitHub Desktop.
Proxy memo async
const someExpensiveOperation = async x => {
await new Promise(resolve => setTimeout(resolve, 1000))
return x.toUpperCase()
}
const PROXY_MEMO = Object.create(
new Proxy(
{},
{
get(_, handler) {
console.log(`called Proxy for '${handler}'`)
return (PROXY_MEMO[handler] = someExpensiveOperation(handler))
}
}
)
)
async function test() {
return await Promise.all('abcabcabc'.split('').map(l => PROXY_MEMO[l]))
}
test().then(letters => console.log(letters))
called Proxy for 'a'
called Proxy for 'b'
called Proxy for 'c'
Array(9) [ "A", "B", "C", "A", "B", "C", "A", "B", "C" ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment