You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
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
npmnpm
Version published
Weekly downloads
22
2100%
Maintainers
2
Weekly downloads
 
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

observable

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