Skip to content
Foxipa
Code Completion 9 Challenges

JavaScript Explicit Resource Management — Code Completion

Practice using declarations, disposal protocols, and disposable stacks.

Challenge 1

Write a using declaration.

javascript Your answer
using resource = acquire();
console.log(resource);

Press Ctrl⌘Enter to check your answer

Challenge 2

Write an await using declaration.

javascript Your answer
async function work() {
  await using resource = await acquireAsync();
  return resource;
}

Press Ctrl⌘Enter to check your answer

Challenge 3

Expose synchronous cleanup through the disposal protocol.

javascript Your answer
const resource = {
  [Symbol.dispose]() {
    console.log("closed");
  }
};

Press Ctrl⌘Enter to check your answer

Challenge 4

Expose asynchronous cleanup through the protocol.

javascript Your answer
const resource = {
  [Symbol.asyncDispose]() {
    return Promise.resolve("closed");
  }
};

Press Ctrl⌘Enter to check your answer

Challenge 5

Register a disposable resource on a stack.

javascript Your answer
const stack = new DisposableStack();
const resource = makeResource();
stack.;
stack.dispose();

Press Ctrl⌘Enter to check your answer

Challenge 6

Register a value with custom cleanup.

javascript Your answer
const stack = new DisposableStack();
const value = {};
stack.(value, () => console.log("cleaned"));
stack.dispose();

Press Ctrl⌘Enter to check your answer

Challenge 7

Register cleanup that has no resource value.

javascript Your answer
const stack = new DisposableStack();
stack.(() => console.log("done"));
stack.dispose();

Press Ctrl⌘Enter to check your answer

Challenge 8

Transfer pending ownership to another stack.

javascript Your answer
const first = new DisposableStack();
first.defer(() => console.log("cleanup"));
const second = first.();
second.dispose();

Press Ctrl⌘Enter to check your answer

Challenge 9

Construct a SuppressedError that keeps the cleanup failure as error and the original failure as suppressed.

javascript Your answer
const original = new Error("body failed");
const cleanup = new Error("cleanup failed");
const combined = ;
console.log(combined.error === cleanup);
console.log(combined.suppressed === original);

Press Ctrl⌘Enter to check your answer