Promise.resolve() returns a Promise that is resolved with a given value. It is commonly used when a function should return a promise even though the value is already available, when normalizing sync and async code, or when adopting another promise or thenable. Immediate resolves often appear as inputs in Promise.race demos alongside slower timers.
The method is simple, but the behavior matters: if you pass a normal value, the returned promise fulfills with that value. If you pass a promise, Promise.resolve() follows that promise's final state.
Environment: Node.js v20.18.2. After each runnable snippet, the following paragraph states the expected console output (order and values).
JavaScript Promise.resolve Syntax
Promise.resolve(value)value can be a plain value, an object, an existing promise, or a thenable object.
Method 1: Resolve a Plain Value
Use Promise.resolve() to wrap a value in a fulfilled promise.
Promise.resolve("ready")
.then((value) => {
console.log("resolve-value:", value);
});You should see one line logging resolve-value: ready.
This is useful when an API should always return a promise, even when the data is already available.
Method 2: Resolve an Existing Promise
If the value is already a promise, Promise.resolve() follows that promise.
Promise.resolve(Promise.resolve(7))
.then((value) => {
console.log("resolve-promise:", value);
});You should see one line logging resolve-promise: 7.
The result is not a nested promise value. JavaScript unwraps the promise and passes the final fulfilled value to .then().
Method 3: Normalize Sync and Async Results
Promise.resolve() is useful when a function may return either a direct value or a promise, but the caller wants one consistent promise-based flow.
function maybeCached(useCache) {
if (useCache) {
return "cached user";
}
return Promise.resolve("loaded user");
}
Promise.resolve(maybeCached(true))
.then((value) => console.log(value));You should see one line logging cached user.
This pattern is common in libraries that accept callbacks, plugins, or loaders that may be synchronous or asynchronous.
Method 4: Use Promise.resolve in Async Functions
An async function automatically wraps returned values in a promise, so you usually do not need Promise.resolve() inside it.
async function getStatus() {
return "ready";
}
getStatus().then((status) => console.log(status));You should see one line logging ready.
Use a direct return in async functions unless you specifically need to adopt a value before returning it.
Promise.resolve vs Promise.reject
Promise.resolve() creates or adopts a fulfilled promise. Promise.reject() creates a rejected promise.
Promise.resolve("ok").then((value) => console.log(value));
Promise.reject(new Error("not ok")).catch((error) => console.log(error.message));You should see 2 lines, in order: ok, not ok.
Use Promise.resolve() for successful values and Promise.reject() for controlled failures in promise-returning functions.
Common Questions About Promise.resolve
What does Promise.resolve return?
It returns a promise. The promise fulfills with the value you pass, or follows the state of the promise or thenable you pass.
Do I need Promise.resolve inside async functions?
Usually no. An async function already returns a promise and automatically wraps non-promise return values.
Is Promise.resolve synchronous?
The promise object is created immediately, but .then() callbacks run asynchronously in the microtask queue after the current call stack finishes.
Summary
Promise.resolve() is a JavaScript helper for creating a fulfilled promise from a value and for normalizing values that may or may not already be promises. It is useful in promise-returning APIs, cache paths, plugin systems, and tests. In async functions, a plain return is usually enough because JavaScript wraps the returned value in a promise automatically.
