Socket
Socket
Sign inDemoInstall

@truffle/promise-tracker

Package Overview
Dependencies
0
Maintainers
9
Versions
11
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @truffle/promise-tracker

A tool for wrangling async operations that need to complete before the truffle process exits


Version published
Weekly downloads
15K
increased by26.17%
Maintainers
9
Install size
11.2 kB
Created
Weekly downloads
 

Readme

Source

@truffle/promise-tracker

This library is used for keeping track of asynchronous work that needs to complete prior to the process exiting.

Usage

IMPORTANT Only use this library as a last resort. Typically you're better off architecting things so that you don't need process-level tracking of outstanding tasks.

Some alternatives to consider before using this module:

  • Wherever possible, only make asynchronous calls from within an asynchronous context (aka, avoid using .then and .catch callbacks).
  • Implement timeouts for long-running processes using Promise.race
  • Unref any best-effort/speculative timers (immediate, timeout to prevent them from keeping your process alive when everything else is done

Tracking asynchronous operations

For the moment promise tracking is implemented as a method decorator, meaning it must be applied to method declaration on a class.

It can be applied to any method, and it will only add special handling when methods return promises

import { tracked } from "@truffle/promise-tracker";

class Foo {
  // totally fine, even though it doesn't return a promise
  @tracked
  synchronousBar(): "-" {
    return "-";
  }

  @tracked
  async asyncBar(): Promise<"-"> {
    return "-";
  }

  // this works the same as with `asyncBar`, even though it's not explicitly an
  // async method
  @tracked
  promiseBar(): Promise<"-"> {
    return new Promise<"-">(resolve => resolve("-"));
  }
}

Waiting for tracked operations to complete (async)

import { waitForOutstandingPromises } from "@truffle/promiseTracker";

let exitCode = 0;

// If no catchHandler is passed, rejected promises are handled silently.
// This is because these promise rejections should already be handled by the
// caller that created the promise.
await waitForOutstandingPromises({ catchHandler: () => (exitCode = 1) });
process.exit(exitCode);

Waiting for tracked operations to complete (synchronous)

import { waitForOutstandingPromises } from "@truffle/promiseTracker";

let exitCode = 0;

// If no catchHandler is passed, rejected promises are handled silently.
// This is because these promise rejections should already be handled by the
// caller that created the promise.
waitForOutstandingPromises({ catchHandler: () => (exitCode = 1) }).then(() => {
  process.exit(exitCode);
});

Keywords

FAQs

Last updated on 07 Sep 2023

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc