Skip to content

Instantly share code, notes, and snippets.

@gabemeola
Last active January 16, 2018 02:53
Show Gist options
  • Save gabemeola/67df40a9d3cfa67211b9dabadf748e7e to your computer and use it in GitHub Desktop.
Save gabemeola/67df40a9d3cfa67211b9dabadf748e7e to your computer and use it in GitHub Desktop.
Caches a function call to be in lazily invoked just once.
/**
* Takes a function a lazily runs it once when invoked.
*
* Returns cached return value to subsequent calls.
* Return value will always have reference equality with subsequent calls.
*
* @param {function} func - Function to run Once
* @return {function}
*/
export default function once(func) {
const neverRan = Symbol();
let cacheReturn = neverRan;
return function onceRun(...args) {
if (cacheReturn === neverRan) {
cacheReturn = func(...args);
}
return cacheReturn;
};
}
@gabemeola
Copy link
Author

gabemeola commented Jan 14, 2018

Tiny Version

const once = (func) => {
	let neverRan = Symbol(), cacheReturn = neverRan;
	return (...args) => (cacheReturn !== neverRan || (cacheReturn = func(...args))) && cacheReturn;
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment