p-all vs p-map vs p-queue vs p-series
非同期処理ライブラリ
p-allp-mapp-queuep-series類似パッケージ:

非同期処理ライブラリ

これらのライブラリは、JavaScriptの非同期処理を効率的に管理するためのツールです。特に、Promiseを使用した非同期操作の実行や制御を簡素化し、開発者が複雑な非同期ロジックを簡単に扱えるようにします。これにより、コードの可読性が向上し、エラーの発生を減少させることができます。

npmのダウンロードトレンド

3 年

GitHub Starsランキング

統計詳細

パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
p-all03455.6 kB06ヶ月前MIT
p-map01,48421.3 kB124ヶ月前MIT
p-queue04,15376.8 kB63ヶ月前MIT
p-series072-05年前MIT

機能比較: p-all vs p-map vs p-queue vs p-series

実行方法

  • p-all:

    p-allは、複数のPromiseを同時に実行し、すべてのPromiseが解決されるのを待ちます。すべての結果を一度に取得したい場合に最適です。

  • p-map:

    p-mapは、配列内の各要素に対して非同期関数を適用し、結果を収集します。並行処理を行いながら、同時に実行するタスクの数を制限できます。

  • p-queue:

    p-queueは、非同期タスクをキューに追加し、順番に実行します。タスクが完了するまで次のタスクを開始しないため、リソースの競合を避けることができます。

  • p-series:

    p-seriesは、非同期タスクを直列に実行します。各タスクが完了するまで次のタスクを開始せず、順番に処理を行います。

エラーハンドリング

  • p-all:

    p-allは、すべてのPromiseが解決されるまで待機しますが、いずれかのPromiseが拒否された場合、エラーが発生します。すべての結果を取得するためには、個別にエラーハンドリングを行う必要があります。

  • p-map:

    p-mapは、各非同期処理の結果を個別に処理できるため、エラーハンドリングが容易です。各タスクのエラーを独立して管理できます。

  • p-queue:

    p-queueは、タスクが順次実行されるため、前のタスクが失敗した場合、次のタスクには影響を与えません。エラー処理を簡単に行えます。

  • p-series:

    p-seriesも、タスクが直列に実行されるため、前のタスクのエラーが次のタスクに影響を与えません。エラーハンドリングが簡単です。

パフォーマンス

  • p-all:

    p-allは、すべてのPromiseを同時に実行するため、リソースを大量に消費する可能性があります。APIリクエストなどの重い処理には注意が必要です。

  • p-map:

    p-mapは、同時に実行するタスクの数を制限できるため、リソースの消費を抑えつつ、効率的に処理を行えます。

  • p-queue:

    p-queueは、タスクを順次実行するため、リソースの競合を避けることができ、安定したパフォーマンスを維持します。

  • p-series:

    p-seriesは、タスクを直列に実行するため、リソースの使用を最小限に抑えつつ、確実に処理を行います。

使い方のシナリオ

  • p-all:

    p-allは、複数のAPIリクエストを同時に行い、すべての結果を一度に取得したい場合に適しています。

  • p-map:

    p-mapは、データベースの複数のレコードに対して非同期処理を行いたい場合に便利です。

  • p-queue:

    p-queueは、限られたリソースでタスクを順番に実行したい場合に適しています。

  • p-series:

    p-seriesは、依存関係のあるタスクを順番に実行する必要がある場合に最適です。

選び方: p-all vs p-map vs p-queue vs p-series

  • p-all:

    すべてのPromiseが解決されるのを待つ必要がある場合に選択します。すべての非同期タスクを同時に実行し、すべての結果を取得したいときに適しています。

  • p-map:

    非同期処理を並行して実行したいが、同時に実行する数を制限したい場合に選択します。特に、APIリクエストなどのリソースを消費する操作に便利です。

  • p-queue:

    非同期処理を順次実行したい場合に選択します。タスクをキューに追加し、前のタスクが完了するまで次のタスクを実行しない場合に適しています。

  • p-series:

    非同期処理を直列に実行したい場合に選択します。タスクを一つずつ順番に実行し、前のタスクが完了するまで次のタスクを開始しない場合に便利です。

p-all のREADME

p-all

Run promise-returning & async functions concurrently with optional limited concurrency

Similar to Promise.all(), but accepts functions instead of promises directly so you can limit the concurrency.

If you're doing the same work in each function, use p-map instead.

See p-series for a serial counterpart.

Install

npm install p-all

Usage

import pAll from 'p-all';
import got from 'got';

const actions = [
	() => got('https://sindresorhus.com'),
	() => got('https://avajs.dev'),
	() => checkSomething(),
	() => doSomethingElse()
];

console.log(await pAll(actions, {concurrency: 2}));

API

pAll(tasks, options?)

Returns a Promise that is fulfilled when all promises returned from calling the functions in tasks are fulfilled, or rejects if any of the promises reject. The fulfilled value is an Array of the fulfilled values in tasks order.

tasks

Type: Iterable<Function>

Iterable with promise-returning/async functions.

options

Type: object

concurrency

Type: number (Integer)
Default: Infinity
Minimum: 1

Number of concurrently pending promises.

stopOnError

Type: boolean
Default: true

When set to false, instead of stopping when a promise rejects, it will wait for all the promises to settle and then reject with an AggregateError containing all the errors from the rejected promises.

signal

Type: AbortSignal

You can abort the promises using AbortController.

Related

  • p-map - Map over promises concurrently
  • p-series - Run promise-returning & async functions in series
  • p-props - Like Promise.all() but for Map and Object
  • p-queue - Promise queue with concurrency control
  • p-limit - Run multiple promise-returning & async functions with limited concurrency
  • More…