Big update!Introducing GitHub Bot Commands. Learn more
Log inBook a demo


Package Overview
File Explorer

Advanced tools


delay the evaluation of a paramless async function and cache the result


Version published
Weekly downloads
decreased by-14.62%

Weekly downloads




Delay the evaluation of a paramless async function and cache the result (see thunk).

npm install thunky

build status


Let's make a simple function that returns a random number 1 second after it is called for the first time

var thunky = require('thunky') var test = thunky(function (callback) { // the inner function should only accept a callback console.log('waiting 1s and returning random number') setTimeout(function () { callback(Math.random()) }, 1000) }) test(function (num) { // inner function is called the first time we call test console.log(num) // prints random number }) test(function (num) { // subsequent calls waits for the first call to finish and return the same value console.log(num) // prints the same random number as above })

Lazy evaluation

Thunky makes it easy to implement a lazy evaluation pattern.

var getDb = thunky(function (callback) {, callback) }) var queryDb = function (query, callback) { getDb(function (err, db) { if (err) return callback(err) db.query(query, callback) }) } queryDb('some query', function (err, result) { ... } ) queryDb('some other query', function (err, result) { ... } )

The first time getDb is called it will try do open a connection to the database. Any subsequent calls will just wait for the first call to complete and then call your callback.

A nice property of this pattern is that it easily allows us to pass any error caused by getDb to the queryDb callback.

Error → No caching

If the thunk callback is called with an Error object as the first argument it will not cache the result

var fails = thunky(function (callback) { console.log('returning an error') callback(new Error('bad stuff')) }) fails(function (err) { // inner function is called console.log(err) }); fails(function (err) { // inner function is called again as it returned an error before console.log(err) })

Promise version

A promise version is available as well

var thunkyp = require('thunky/promise') var ready = thunkyp(async function () { // ... do async stuff return 42 }) // same semantics as the callback version await ready()





What is thunky?

delay the evaluation of a paramless async function and cache the result

Is thunky popular?

The npm package thunky receives a total of 8,276,979 weekly downloads. As such, thunky popularity was classified as popular.

Is thunky well maintained?

We found that thunky demonstrated a not healthy version release cadence and project activity because the last version was released a year ago.It has 2 open source maintainers collaborating on the project.

Last updated on 14 Oct 2019

Did you know?

Socket installs a Github app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.

Install Socket


Subscribe to our newsletter

Get open source security insights delivered straight into your inbox. Be the first to learn about new features and product updates.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc