"using statement" in JavaScript and TypeScript.
npm install using-statement


Function call that acts like a
using statement.
With Deno:
``ts`
import { using } from "https://deno.land/x/using_statement/mod.ts";
Or with Node:
``
npm install --save using-statement
Before:
`ts`
const camera = new Camera();
try {
outputPicture(camera.takePictureSync());
} finally {
camera.dispose();
}
After:
`ts
import { using } from "https://deno.land/x/using_statement/mod.ts";
using(new Camera(), (camera) => {
outputPicture(camera.takePictureSync());
});
`
- Supports synchronous, asynchronous, and generator functions.
- Handles exceptions to ensure the resource is properly disposed.
- Accepts objects with a dispose(), close(), or unsubscribe() method.
- Allows asynchronously disposing when using a synchronous or asynchronous
function.
Setup:
`ts
// Camera.ts
export class Camera {
takePictureSync() {
// ...etc...
return pictureData;
}
async takePicture() {
// ...etc...
return pictureData;
}
dispose() {
// clean up the resource this class is holding
}
}
`
Synchronous example:
`ts
import { using } from "https://deno.land/x/using_statement/mod.ts";
import { Camera } from "./Camera.ts";
using(new Camera(), (camera) => {
const picture = camera.takePictureSync();
outputPicture(picture); // some function that outputs the picture
});
// camera is disposed here
`
Asynchronous example:
`ts
import { using } from "https://deno.land/x/using_statement/mod.ts";
import { Camera } from "./Camera.ts";
await using(new Camera(), async (camera) => {
const picture = await camera.takePicture();
outputPicture(picture);
});
// camera is disposed here
`
Generator function example:
`ts
import { using } from "https://deno.land/x/using_statement/mod.ts";
import { Camera } from "./Camera.ts";
const picturesIterator = using(new Camera(), function* (camera) {
for (let i = 0; i < 10; i++) {
yield camera.takePictureSync();
}
});
// camera is not disposed yet...
for (const picture of picturesIterator) {
outputPicture(picture);
}
// camera is now disposed
``
- C#'s
using statement.
- My old gist here.
- ECMAScript using statement proposal.