I\'m trying to return an async function but I either get promise: < { PENDING } > or [object Promise] instead of [object Object]
I solved this by adding an await to the top level getNext() aka
const next = await getNext({
  page,
  value,
  name,
  id,
});
which is inside an async router.post call. So the answer is: make sure all functions are async all the way to the top so that they wait for eachother.
You cannot make asynchronous code synchronous.
The await keyword lets you write code that looks synchronous, but is really asynchronous.
You can only use await inside a function which is async.
To make await work, all async functions return promises. Those promises resolve to be the return value of the function.
In short: You have the normal and expected behaviour, and you can't prevent an async function from returning a promise.