Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@homer0/deferred

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@homer0/deferred

Small utility to create a deferred promise

  • 3.0.5
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

🕗 Deferred

Small utility to create a deferred promise

🍿 Usage

  • ⚙️ Examples
  • 🤘 Development

⚙️ Examples

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:

  1. MyServiceThatLoadsAFile creates a deferred promise on its constructor.
  2. 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.
  3. Eventually, 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.

🤘 Development

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.

Tasks
TaskDescription
lintLints the package.
testRuns the unit tests.
buildTranspiles and bundles the project.
types:checkValidates the TypeScript types.

Keywords

FAQs

Package last updated on 18 May 2024

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc