CHALLENGE
async function fetchData(id) {
if (id < 0) throw new Error("Invalid ID");
return { id, value: id * 10 };
}
async function process() {
const results = await Promise.allSettled([
fetchData(1),
fetchData(-1),
fetchData(3),
]);
results.forEach(({ status, value, reason }) => {
if (status === "fulfilled") {
console.log(`fulfilled: ${value.id} -> ${value.value}`);
} else {
console.log(`rejected: ${reason.message}`);
}
});
}
process();
โค6๐3๐ค2
If you donโt read the specs or endless posts about new language features, this is a great way to catch up. Most of the features are supported in Node, like Promise.try, Set union/intersection/difference, Array.fromAsync, and using, with others soon to land, like Math.sumPrecise and Map.getOrInsert (in Node 26).
Neciu Dan
Please open Telegram to view this post
VIEW IN TELEGRAM
โค7๐ฅ4๐2๐ค1๐คฉ1
CHALLENGE
const EventEmitter = (() => {
const listeners = new WeakMap();
return class {
constructor() {
listeners.set(this, {});
}
on(event, fn) {
const map = listeners.get(this);
(map[event] ??= []).push(fn);
return this;
}
emit(event, ...args) {
const map = listeners.get(this);
(map[event] ?? []).forEach(fn => fn(...args));
return this;
}
};
})();
const bus = new EventEmitter();
const log = [];
bus
.on("data", val => log.push(`A:${val}`))
.on("data", val => log.push(`B:${val}`))
.on("done", () => log.push("done"));
bus.emit("data", 1).emit("data", 2).emit("done");
console.log(log.join(" | "));
โค8๐ฅ1
What is the output?
Anonymous Quiz
19%
A:1 | B:1 | done
40%
A:1 | A:2 | B:1 | B:2 | done
29%
A:1 | B:1 | A:2 | B:2 | done
13%
A:1 | B:2 | done
โค2๐1
CHALLENGE
class Vehicle {
#speed = 0;
constructor(brand) {
this.brand = brand;
}
accelerate(amount) {
this.#speed += amount;
return this;
}
getSpeed() {
return this.#speed;
}
toString() {
return `${this.brand} @ ${this.#speed}km/h`;
}
}
class Car extends Vehicle {
#gear = 1;
constructor(brand, model) {
super(brand);
this.model = model;
}
shiftUp() {
this.#gear++;
return this;
}
toString() {
return `${super.toString()} [Gear ${this.#gear}]`;
}
}
const car = new Car("Toyota", "Supra");
car.accelerate(60).accelerate(40).shiftUp().shiftUp();
console.log(car.toString());
console.log(car instanceof Car);
console.log(car instanceof Vehicle);
console.log(Object.getPrototypeOf(Car) === Vehicle);
โค4๐1
CHALLENGE
const delay = (ms, val) => new Promise(res => setTimeout(res, ms, val));
async function pipeline(...fns) {
return async (input) => {
let result = input;
for (const fn of fns) {
result = await fn(result);
}
return result;
};
}
const double = async (x) => delay(10, x * 2);
const addTen = async (x) => delay(10, x + 10);
const square = async (x) => delay(10, x ** 2);
(async () => {
const process = await pipeline(double, addTen, square);
const output = await process(3);
console.log(output);
})();
โค2๐ฅ2๐1
โค2๐ฅ1
CHALLENGE
const inventory = new Map([
["sword", { quantity: 3, weight: 15 }],
["shield", { quantity: 1, weight: 25 }],
["potion", { quantity: 10, weight: 2 }],
]);
inventory.set("bow", { quantity: 2, weight: 8 });
inventory.delete("shield");
const totalWeight = [...inventory.entries()].reduce((acc, [item, { quantity, weight }]) => {
return acc + quantity * weight;
}, 0);
const heaviestItem = [...inventory.entries()].reduce((max, [item, data]) =>
data.weight > max.weight ? { name: item, ...data } : max,
{ name: "", weight: 0 }
);
console.log(inventory.size, totalWeight, heaviestItem.name);
โค4๐2
โค4๐2
CHALLENGE
const ops = {
add: (a, b) => a + b,
subtract: (a, b) => a - b,
multiply: (a, b) => a * b,
divide: (a, b) => b !== 0 ? a / b : NaN,
};
const pipeline = (...fns) => (value) => fns.reduce((acc, fn) => fn(acc), value);
const double = (x) => ops.multiply(x, 2);
const addTen = (x) => ops.add(x, 10);
const halve = (x) => ops.divide(x, 2);
const subtractThree = (x) => ops.subtract(x, 3);
const transform = pipeline(double, addTen, halve, subtractThree);
const results = [5, 0, -4].map(transform);
console.log(results);โค5๐2๐ฅ1
What is the output?
Anonymous Quiz
23%
[ 9, 2, -2 ]
34%
[ 7, 5, -3 ]
22%
[ 12, 5, 1 ]
22%
[ 7, 2, -2 ]
1โค5๐ฅ2๐1
CHALLENGE
const values = [0.1 + 0.2, NaN, Infinity, -0, 42.6789];
const results = values.map((v, i) => {
if (i === 0) return Number.isInteger(v) + " | " + v.toFixed(2);
if (i === 1) return Number.isFinite(v) + " | " + Number.isNaN(v);
if (i === 2) return Number.isFinite(v) + " | " + Number.MAX_SAFE_INTEGER;
if (i === 3) return Object.is(v, -0) + " | " + (v === 0);
if (i === 4) return v.toFixed(2) + " | " + v.toPrecision(4);
});
results.forEach(r => console.log(r));
โค4๐ฅ2๐ค2
โค5
It's here! Complete with the Temporal API enabled by default, V8 14.6 (say hello to map โupsertโ methods like Map.prototype.getOrInsert() and iterator sequencing with Iterator.concat()), plus Undici 8. v26 is the โCurrentโ cutting-edge release until October when it gets promoted to LTS.
Rafael Gonzaga
Please open Telegram to view this post
VIEW IN TELEGRAM
โค4๐ฅ3๐2๐คฉ1
CHALLENGE
const items = [
{ name: "banana", price: 1.5, qty: 10 },
{ name: "apple", price: 1.5, qty: 5 },
{ name: "cherry", price: 3.0, qty: 8 },
{ name: "date", price: 2.0, qty: 8 },
];
const sorted = [...items].sort((a, b) => {
if (a.price !== b.price) return a.price - b.price;
if (a.qty !== b.qty) return b.qty - a.qty;
return a.name.localeCompare(b.name);
});
console.log(sorted.map(i => `${i.name}:${i.qty}`).join(", "));
๐ฅ5โค3๐1
Uses a variety of techniques to convert even complex HTML into plain text (but with some formatting, such as for tables). v10 brings the project up to modern standards.
KillyMXI
Please open Telegram to view this post
VIEW IN TELEGRAM
โค4๐1
CHALLENGE
class DatabaseError extends Error {
constructor(message, code) {
super(message);
this.name = "DatabaseError";
this.code = code;
}
}
class ConnectionError extends DatabaseError {
constructor(host) {
super(`Failed to connect to ${host}`, 503);
this.name = "ConnectionError";
this.host = host;
}
}
const err = new ConnectionError("db.server.io");
console.log([
err instanceof ConnectionError,
err instanceof DatabaseError,
err instanceof Error,
err.name,
err.code,
err.message,
].join(" | "));
๐ฅ3๐1
What is the output?
Anonymous Quiz
16%
true | true | false | ConnectionError | 503 | Failed to connect to db.server.io
34%
true | true | true | DatabaseError | 503 | Failed to connect to db.server.io
24%
true | false | true | ConnectionError | 503 | Failed to connect to db.server.io
26%
true | true | true | ConnectionError | 503 | Failed to connect to db.server.io
๐ฅ1