About This Article
This article is created using an automated generation workflow leveraging generative AI. We verified the ECMAScript 2026 Promise specification, Microsoft Learn’s Task asynchronous programming, and VBA DoEvents official documentation to organize concepts that look similar by their roles.Verification Status: 🧪 Language specifications and official documentation checked; execution order of Callbacks, Promises, and await verified in Node.js
What’s the Difference Between Sync, Async, Callbacks, and Promises? — Separating “How to Wait” from “How to Receive Results”
Synchronous and asynchronous operations are properties of how execution is waited on. Callbacks and Promises are representative coding styles and mechanisms for handling task completion and results. Therefore, 非同期 = Promise is not the case.
Furthermore, VBA’s DoEvents is not asynchronous processing itself. It is a mechanism that temporarily yields execution to the OS to process events in the queue.
- First, Place Terms on Separate Axes
- Viewing Sync and Async on a Timeline
- Callbacks Are the Concept of “Passing Functions”
- Promises Represent Future Results
- async/await Changes Readability
- How is VBA’s DoEvents Different?
- Try It Now: Observe Execution Order with the Console
- When in Doubt, Ask Two Questions
- GitHub Sample
- Official & Primary Sources
First, Place Terms on Separate Axes
| Term | What It Represents | Common Misconceptions |
|---|---|---|
| Synchronous | The progression and waiting method of a called process | Does not mean “slow processing” |
| Asynchronous | A configuration where the caller is not blocked while waiting for completion, etc. | Not synonymous with parallel processing |
| Callback | The pattern of passing a function to be called later | A Callback does not automatically mean asynchronous |
| Promise | An object representing a result available in the future | A Promise itself does not create a separate thread |
| async/await | Language features and syntax to write asynchronous code more easily | Using await does not necessarily increase the number of threads |
| DoEvents | A VBA feature that yields control to the OS to process events | Not a general asynchronous API |
Viewing Sync and Async on a Timeline
sequenceDiagram
participant C as Caller
participant W as Work
rect rgb(245,245,245)
Note over C,W: 同期のイメージ
C->>W: start
W-->>C: result
C->>C: 次の処理
end
rect rgb(245,245,245)
Note over C,W: 非同期のイメージ
C->>W: start
W-->>C: 完了を待つための表現
C->>C: 待ち方に応じて別の処理へ
W-->>C: completion / result
end
The value of asynchronous processing is not “making a 3-second task take 1 second.” It lies in how waiting time is handled, such as preventing UI freezes during I/O waits, advancing other tasks, and making it easier to structure multiple operations.
Callbacks Are the Concept of “Passing Functions”
A Callback is a pattern where you pass a function you want called when a process reaches a certain condition. It is used in event handling, and Callback patterns can also be used in synchronous APIs.
Therefore, rather than concluding “it’s asynchronous because there’s a Callback,” you should check when and where the actual API invokes the Callback.
Promises Represent Future Results
The ECMAScript 2026 specification defines a Promise as a placeholder for the final result of a deferred and possibly asynchronous computation. A Promise has states such as pending, fulfilled, and rejected.
What is important here is that “Promise = parallel execution engine” is not true. A Promise is an abstraction that makes results and states easier to handle; which thread or runtime mechanism actually carries out the work is a separate matter.
async/await Changes Readability
In .NET’s Task-based Asynchronous Pattern, using await allows you to write asynchronous code in a way that closely resembles reading sequentially from top to bottom. await is not meant to simply block the current thread while waiting.
In other words, Callbacks, Promises, Tasks, and async/await are choices for “how to express the property of being asynchronous and how to receive results.”
How is VBA’s DoEvents Different?
According to Microsoft’s official VBA documentation, DoEvents is a function that yields control to the OS and returns control after processing the event queue. It is used for purposes such as letting Excel process UI events in the middle of a long loop.
However, calling DoEvents does not turn the process into an asynchronous API. Also, if the same process is re-entered while handling events, it can lead to unexpected results, so the official documentation warns to be careful about re-entrancy.
Try It Now: Observe Execution Order with the Console
Since terminology can easily get confusing, let’s compare them using a small JavaScript snippet that doesn’t use external APIs. You can paste it into your browser’s Developer Tools Console or run it with Node.js.
console.log("A: Sync start");
setTimeout(() => {
console.log("D: Callback result");
}, 200);
Promise.resolve("Promise result").then((result) => {
console.log("C:", result);
});
console.log("B: Sync end");
The key point is that even while waiting for setTimeout or Promise completion, the current synchronous code proceeds first up to B.
However, you must not generalize from this short example alone to say “Promises run on a separate thread” or “Callbacks are always asynchronous.” Callbacks can be used in synchronously called APIs, and Promises themselves do not create threads.
To make it a bit easier to understand, I’ve placed a complete version comparing Sync → Callback → Promise → async/await in the same file on GitHub.
node demo.js
When in Doubt, Ask Two Questions
How does this operation make the caller wait until completion?
How is the completion result returned—via a Callback, Promise, Task, event, or something else?
Dividing things into these two axes makes them easier to organize even when the names differ across VBA, PowerShell, JavaScript, and C#.

