Lodash _.defer() method
What you’ll learn
- How
_.deferschedules work after current synchronous code completes. - How to pass arguments into deferred callbacks.
- When to use
_.defervs_.delayor direct timers. - How to validate deferred ordering in simple examples.
Prerequisites
Helpful context: _.debounce() for scheduling concepts and the Function hub.
- Event loop basics: timers run later than sync statements.
- Function arguments: forwarding values to callbacks.
Overview
_.defer(func, ...args) defers execution until after the current call stack clears. It behaves like a tiny timeout helper and returns the timer id.
Syntax
_.defer(func, ...args)- func: function to execute later.
- args: optional arguments passed to
func. - returns: timer id number.
Deferred ordering
Synchronous logs run first; deferred callback logs after stack clears.
import defer from "lodash/defer";
console.log("start");
defer(() => console.log("deferred"));
console.log("end");
// start
// end
// deferredPassing arguments
Additional values after func are forwarded into the deferred callback.
import defer from "lodash/defer";
defer(function (text) {
console.log(text);
}, "deferred");
// logs "deferred"Timer id return
_.defer returns a timer id, useful when coordinating with timer APIs.
import defer from "lodash/defer";
const id = defer(() => console.log("later"));
console.log(typeof id);
// "number"📋 _.defer vs _.delay
| Helper | Wait control | Use case |
|---|---|---|
_.defer | Fixed next tick style delay | Run after synchronous setup |
_.delay | Custom milliseconds | Run after explicit time |
Pitfalls to avoid
Not immediate
defer never runs inline; do not rely on return values from deferred callbacks.
Different queue
Promise callbacks run in microtask timing, which may execute before timer-based defer callbacks.
Abandoned timers
Track ids if lifecycle teardown requires clearing pending work.
❓ FAQ
Summary
- Purpose:
_.deferschedules callback execution after current synchronous code. - Arguments: extra parameters are forwarded to the callback.
- Next: Lodash _.delay(), revisit Lodash _.debounce(), or read official _.defer docs.
In Lodash 4.x, _.defer is implemented as baseDelay(func, 1, args) via baseRest, so execution is always deferred until after the current synchronous stack completes.
6 people found this page helpful
