惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
阮一峰的网络日志
阮一峰的网络日志
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threat Research - Cisco Blogs
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
H
Heimdal Security Blog
W
WeLiveSecurity
L
LINUX DO - 热门话题
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
The Last Watchdog
The Last Watchdog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
D
DataBreaches.Net
I
Intezer
Webroot Blog
Webroot Blog
C
Cisco Blogs
AWS News Blog
AWS News Blog
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
罗磊的独立博客
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Schneier on Security
Schneier on Security
宝玉的分享
宝玉的分享
博客园 - 叶小钗
PCI Perspectives
PCI Perspectives
D
Docker
Scott Helme
Scott Helme
NISL@THU
NISL@THU
J
Java Code Geeks
B
Blog RSS Feed
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
AI
AI
美团技术团队
Cloudbric
Cloudbric
月光博客
月光博客
P
Proofpoint News Feed
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Cloudflare Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Call me back its a promise
Shivam Yadav · 2026-05-07 · via DEV Community

hey its me shivam

todays topic of blog is callback and promise

so lets start without wasting any time lets move to actual work


soooo the story starts from two things

  1. async operation
  2. sync operation

before understanding callback and promise we first need to understand why async programming even exist

because if u directly jump into promise and callback then trust me u will memorize it

not understand it 😭


Sync Operation

so in this the code run line by line yes this is the simplest explanation of sync operation

for example

console.log("Start");

console.log("Task 1");

console.log("Task 2");

console.log("End");

Enter fullscreen mode Exit fullscreen mode

so the output will be

Start
Task 1
Task 2
End

Enter fullscreen mode Exit fullscreen mode

and execution might look like this

Start
 ↓
Task 1
 ↓
Task 2
 ↓
End

Enter fullscreen mode Exit fullscreen mode

JavaScript waits for one task to finish before moving to the next.

simple

clean

straight

like a good boy following rules 😭


The Problem With Synchronous Code

now the problem is imagine a heavy task

like this

console.log("Start");

for (let i = 0; i < 1e9; i++) {}

console.log("Done");

Enter fullscreen mode Exit fullscreen mode

JavaScript is kinda blocked after start because the loop is kinda like infinite

so at this time:

  • UI might freeze
  • button don't work
  • server cannot handle other request

this is called blocking code

and this is dangerous in backend too

because one blocked request can slow other users request too

and users nowadays have patience level of goldfish 💀


Async Operation

now comes the async operation in this

in this the code start executing line by line and whenever the heavy code like this is seen then it is executed but rather than standing there as a dumb

the JavaScript will run another task after that line

and when the execution of heavy task is done then the output is thrown out

example

console.log("Start");

setTimeout(() => {
  console.log("Timer Finished");
}, 2000);

console.log("End");

Enter fullscreen mode Exit fullscreen mode

output

Start
End
Timer Finished

Enter fullscreen mode Exit fullscreen mode

Execution flow:

Start
 ↓
setTimeout registered
 ↓
End
 ↓ (after 2 sec)
Timer Finished

Enter fullscreen mode Exit fullscreen mode

so basically sync code is like good boy walking straight forward

and async code is like:

"i will not wait i busy (he not) call me when the task is done till then i will execute another baddies"

😭


Why Async Code Exists in Node.js

Node.js is built around:

  • non-blocking architecture
  • asynchronous execution
  • handling multiple request together

Imagine if every API request blocked the server.

then server would literally die handling large traffic

instead Node.js says:

"start the task and call me later when done"

that is the whole philosophy behind async programming


now i will explain callback and promise

i know i know it was lengthy but it was necessary guy i cannot do anything

sooooooo..........

let understand

  1. callback
  2. promise

What is Callback?

callback is a function which is passed as a parameter into another function so that it can call it later

yes this what callback is

this how it look's like

function greet(name) {
  console.log("Hello " + name);
}

function processUser(callback) {
  const name = "Shivam";

  callback(name);
}

processUser(greet);

Enter fullscreen mode Exit fullscreen mode

Output:

Hello Shivam

Enter fullscreen mode Exit fullscreen mode


What Happened Here?

processUser(greet);

Enter fullscreen mode Exit fullscreen mode

We passed the greet function as an argument.

Inside:

callback(name);

Enter fullscreen mode Exit fullscreen mode

The callback function gets executed later.

that is literally callback

a function waiting for another function to call it later

like me waiting for motivation to study 😭


Callback Execution Chain

Start Async Task
        ↓
Continue Other Code
        ↓
Task Completes Later
        ↓
Callback Added To Queue
        ↓
Event Loop Executes Callback

Enter fullscreen mode Exit fullscreen mode

this is where Node.js event loop also enters into picture

because callback don't magically execute

event loop handles that execution

but event loop itself is another huge topic 😭


Callback Hell

while learning about callback i got to know callback hell

like this not seen much nowadays but it exist

so what is callback hell

imagine multiple task are depended on each other

example

  • Get user
  • Fetch posts
  • Fetch comments
  • Save logs

Using callbacks:

getUser(id, (user) => {
  getPosts(user.id, (posts) => {
    getComments(posts[0].id, (comments) => {
      saveData(comments, () => {
        console.log("Done");
      });
    });
  });
});

Enter fullscreen mode Exit fullscreen mode


The Callback Hell Problem

This structure creates:

  • Deep nesting
  • Poor readability
  • Difficult debugging
  • Complex maintenance

This is famously called:

Callback Hell

or

Pyramid of Doom

because code shifts endlessly to the right.

bro this code literally starts looking like staircase 😭


So To Solve This Problem We Got Promise

so what is promise

promise is a special object used to handle asynchronous operation

it represent the eventual result of an operation that may:

  • complete
  • fail

in the future

it can be:

  • API request
  • DB calls
  • file reading
  • network communication

etc

A promise acts as a placeholder for a value that is not available immediately but will be available later.


Why Promises Are Needed?

JavaScript performs many operations asynchronously, such as:

  • API requests
  • Database queries
  • File reading
  • Timers
  • Network communication

These operations take time to complete.

Instead of blocking the execution of the program while waiting, JavaScript continues executing other code and uses promises to handle the result later.

Promises basically made async code cleaner and more manageable

because callback hell was becoming a horror movie 💀


States of a Promise

A promise can exist in one of three states:

State Meaning
Pending Initial state; operation is still running
Fulfilled Operation completed successfully
Rejected Operation failed

State Transition

Pending
   ↓
Fulfilled  OR  Rejected

Enter fullscreen mode Exit fullscreen mode

Once fulfilled or rejected, the promise becomes permanently settled and its state cannot change again.


Promise Resolution

A promise produces a result through:

resolve()

Used when the operation succeeds.

reject()

Used when the operation fails.


Example of Promise

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("User data");
    }, 2000);
  });
}

Enter fullscreen mode Exit fullscreen mode

the promise return an object which will be having:

  • state
  • returned output(data)

so to handle that we use .then().catch() syntax

which looks like this

fetchData()
  .then((data) => {
    console.log(data);
  })
  .catch((err) => {
    console.log(err);
  });

Enter fullscreen mode Exit fullscreen mode


Promise Lifecycle Flow

Promise Created
        ↓
Pending
   ↓         ↓
Resolved   Rejected
   ↓           ↓
.then()     .catch()

Enter fullscreen mode Exit fullscreen mode


Promise Chaining

but here there is another problem like callback hell

that is promise chain

so in this the promise is chained with .then() function

like this

fetchUser()
  .then((user) => {
    return fetchPosts(user.id);
  })
  .then((posts) => {
    return fetchComments(posts[0].id);
  })
  .then((comments) => {
    console.log(comments);
  })
  .catch((err) => {
    console.log(err);
  });

Enter fullscreen mode Exit fullscreen mode

this is still way cleaner than callback hell

because now code moves downward instead of becoming pyramid

which means:

  • readability improve
  • debugging improve
  • maintenance improve

and developer cry little less 😭


Important Clarification

Promises do NOT make code asynchronous.

Node.js async APIs already work asynchronously.

Promises simply provide:

  • Better structure
  • Better readability
  • Better async management

this is very important thing

many beginner think promises create async behavior

NO

they just manage async behavior better


under the pant thing

😭


Async/Await Comes from Promises

Modern JavaScript uses:

async/await

But internally:

async/await is built on top of promises.

Example:

async function readFile() {
  try {
    const data = await fs.readFile("demo.txt", "utf-8");

    console.log(data);
  } catch (err) {
    console.log(err);
  }
}

Enter fullscreen mode Exit fullscreen mode

This looks synchronous but still works asynchronously underneath.

and this is why async/await became so popular

because human brain likes readable code 😭


Callback vs Promise Readability

Callback

getUser(id, (user) => {
  getPosts(user.id, (posts) => {
    getComments(posts[0].id, (comments) => {
      console.log(comments);
    });
  });
});

Enter fullscreen mode Exit fullscreen mode

Promise

fetchUser()
  .then((user) => fetchPosts(user.id))
  .then((posts) => fetchComments(posts[0].id))
  .then((comments) => console.log(comments))
  .catch((err) => console.log(err));

Enter fullscreen mode Exit fullscreen mode

Promise version clearly looks cleaner

less nesting

less chaos

less depression 💀


The Evolution of Async JavaScript

Synchronous Code
        ↓
Callbacks
        ↓
Promises
        ↓
Async/Await

Enter fullscreen mode Exit fullscreen mode


Final Understanding

Callbacks introduced asynchronous programming in Node.js by allowing functions to execute later after tasks completed.

But nested callbacks created readability and maintenance problems.

Promises improved async programming by providing:

  • Cleaner structure
  • Easier chaining
  • Better error handling
  • Improved readability

The core idea behind all of them remains the same:

Start task
      ↓
Continue execution
      ↓
Handle result later

Enter fullscreen mode Exit fullscreen mode

That non-blocking philosophy is what makes Node.js powerful for modern backend applications.


in the end

so in the end this is my bye

good night if u are reading this at night because i am writing this at night

and if u understood callback and promise after reading this

then my mission successful 😭

bye bye