New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

concurrent-task

Package Overview
Dependencies
Maintainers
2
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

concurrent-task

An observable to run async tasks in parallel with a concurrency limit

  • 5.0.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
2
Created
Source

concurrent-task

Build Status js-standard-style npm version Coverage Status

A brisky-struct instance to run async tasks in parallel with a concurrency limit

Installing

npm install concurrent-task --save

Usage

Below is an example of 5 tasks with 2 steps to execute for each. Each step has a run method which returns an aborting function. If step is not resolved or rejected in time, it will be aborted and an error will be emitted.

  const concurrent = require('concurrent-task')
  
  const steps = [
    {
      timeout: 1000,
      tryCount: 2,
      run (task, resolve, reject) {
        return clearTimeout.bind(null, setTimeout(() => {
          return task.success ? resolve() : reject(new Error('some error'))
        }, task.seconds * 1000))
      }
    },
    {
      timeout: 500,
      tryCount: 3,
      run (task, resolve, reject) {
        return clearTimeout.bind(null, setTimeout(() => {
          return task.success ? resolve({ [task.id]: 'result' }) : reject(new Error('some error'))
        }, task.seconds * 1000))
      }
    }
  ]

  // create a task runner with steps
  const runner = concurrent(steps)

  // this method can be called several times
  // so to add more tasks on the go
  runner.addTask([
    { id: 'task1', seconds: 0.3, success: true },
    { id: 'task2', seconds: 0.7, success: true },
    { id: 'task3', seconds: 0.2, success: false },
    { id: 'task4', seconds: 1.2, success: false },
    { id: 'task5', seconds: 0.3, success: true }
  ])

  runner
    .on('error', (task, error) => {
      // one of tasks had an error on one of steps
      // task is something like { id: 'task3', seconds: 0.2, success: false }
    })
    .on('task-done', task => {
      // one of tasks completed all steps with no error
      // task is something like { id: 'task3', seconds: 0.2, success: false }
    })
    .on('complete', () => {
      // all the tasks completed all steps
      // if any of them had errors
      // tryCounts are exhausted

      // log runner status
      console.log(runner.status())
      // logs something like: { waiting: 0, running: 0, error: 2, done: 3 }
      
      // log task results
      console.log(runner.results())
      // logs something like: { task1: 'result', task5: 'result' }
      
      // keep memory clean
      runner.set(null)
    })
    // run with concurrency limited to 2
    .run(2)

Keywords

FAQs

Package last updated on 24 Apr 2017

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