JavaScript Web
// Async HTTP fetch with exponential-backoff retry
const MAX_RETRIES = 3;
async function fetchWithRetry(url, options = {}, retries = MAX_RETRIES) {
try {
const response = await fetch(url, {
headers: { 'Content-Type': 'application/json', ...options.headers },
...options,
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
return await response.json();
} catch (err) {
if (retries > 0) {
const delay = 2 ** (MAX_RETRIES - retries) * 200;
console.warn(`Retrying in ${delay}ms… (${retries} left)`);
await new Promise((res) => setTimeout(res, delay));
return fetchWithRetry(url, options, retries - 1);
}
throw err;
}
}
// Binary-search tree — in-order traversal
class TreeNode {
constructor(val, left = null, right = null) {
this.val = val;
this.left = left;
this.right = right;
}
}
function inorder(node, result = []) {
if (!node) return result;
inorder(node.left, result);
result.push(node.val);
inorder(node.right, result);
return result;
}
const tree = new TreeNode(4,
new TreeNode(2, new TreeNode(1), new TreeNode(3)),
new TreeNode(6, new TreeNode(5), new TreeNode(7)),
);
console.log(inorder(tree)); // [1, 2, 3, 4, 5, 6, 7]
// Iterator protocol
function* range(start, end, step = 1) {
for (let i = start; i < end; i += step) yield i;
}
const evens = [...range(0, 20, 2)];
console.log(evens);