Security News
Input Validation Vulnerabilities Dominate MITRE's 2024 CWE Top 25 List
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
@homer0/deferred
Advanced tools
Small utility to create a deferred promise
Using it is really simple, you call the deferred()
function and get an object with promise
, resolve
and reject
. You return the promise
property and, eventually, call resolve
or reject
to either resolve the promise or reject it.
Now, a reason to use this is for when you have another service/function/something asking for something that your code hasn't even started to do:
import * as fs from 'fs/promises';
import { deferred, type DeferredPromise } from '@homer0/deferred';
class MyServiceThatLoadsAfile {
private defer: DeferredPromise<string>;
private file: string;
constructor() {
this.defer = deferred();
}
getFileContents(): Promise<string> {
if (this.file) return Promise.resolve(this.file);
return this.defer.promise;
}
async loadTheFile(): Promise<void> {
try {
this.file = await fs.readFile('some-path', 'utf-8');
this.defer.resolve(this.file);
} catch (err) {
this.defer.reject(err);
}
}
}
const myService = new MyServiceThatLoadsAfile();
myService.getFileContents().then((contents) => {
console.log('GOT IT', contents);
});
// ...
myService.loadTheFile();
Ok, there's a lot going on this example, so let's break it:
MyServiceThatLoadsAFile
creates a deferred promise on its constructor.getFileContents
should return the file contents, but because the file is not loaded yet (as loadTheFile
has not been called), it returns the deferred promise.loadTheFile
gets called, it loads the file and either resolves or rejects the deferred promise, so the getFileContents().then(...)
(or catch
:P) gets finally called.I wanted to keep the example small, but on a real app, getFileContents
is probably called by other service that has no idea the instance was just created or that loadTheFile
hasn't been called yet.
As this project is part of the packages
monorepo, some of the tooling, like lint-staged
and husky
, are installed on the root's package.json
.
Task | Description |
---|---|
lint | Lints the package. |
test | Runs the unit tests. |
build | Transpiles and bundles the project. |
types:check | Validates the TypeScript types. |
FAQs
Small utility to create a deferred promise
We found that @homer0/deferred demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.