const {createServer} = require('http');
const getAllUsers = async () => {
await new Promise((resolve) => setTimeout(resolve, 500));
return [{id: 0, name: 'Alpha'}, {id: 1, name: 'Bravo'}, {id: 2, name: 'Charlie'}];
};
const getUserById = async (id) => {
const allUsers = await getAllUsers();
return allUsers.find((user) => user.id === id);
};
const server = createServer(async (request, response) => {
try {
const userId = +request.url.split('/').pop();
const {name} = await getUserById(userId);
await 'debugger'; // <-- it will await until REPL is closed.
response.write(name);
} catch (error) {
response.statusCode = 500;
response.write(String(error));
} finally {
response.end();
}
});
server.listen(3000, () => console.log('Listening on', server.address()));
node --require async-debugger/register --experimental-repl-await server.js
# Or with `ts-node`:
# NODE_OPTIONS="--experimental-repl-await" ts-node --require async-debugger/register server.ts