Async/await style (i.e. how most of this package's code is written) module.exports = async function() { await delay(1) } function delay(duration) { return new Promise(resolve => setTimeout(resolve, duration)) } Promise without async/await module.exports = function() { return new Promise((resolve, reject) => { setTimeout(resolve, 1) }) } Simple callback exports.runner = function(cb) { setTimeout(cb, 1) } Fibers/futures var Future = require('fibers/future') exports.fiberRunner = function() { var fut = new Future setTimeout(function() { fut['return']() }, 1) return fut.wait() }