# asynckit 中文文档

规范地址：https://npmcn.com/package/asynckit/

版本：0\.5\.0
npm 元数据更新时间：2025-12-18T03:11:43.263Z
中文译文更新时间：2026-11-05T14:37:46.420Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/asynckit
原文对照：https://npmcn.com/package/asynckit/?lang=original
项目主页：https://github.com/alexindigo/asynckit#readme
源码仓库：https://github.com/alexindigo/asynckit

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：26.6 kB，20 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2016-05-18T23:25:43.646Z
- 最新版本发布：2025-12-18T03:11:43.095Z
- 近 30 天下载量：494492418（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：5（近 12 个月 1 个）

## 中文简介

最小的 Aync 任务工具库, 有流支持

## 安装

```sh
npm install asynckit
```

也可以使用：`pnpm add asynckit`、`yarn add asynckit`、`bun add asynckit`

## README

# 启动 [![NPM Module](https://img.shields.io/npm/v/asynckit.svg?style=flat)](https://www.npmjs.com/package/asynckit)

最小的 Aync 任务工具库, 并有流支持 .

[![Coverage Status](https://img.shields.io/coveralls/alexindigo/asynckit/master.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/asynckit?branch=master)

AsyncKit 提供了对 `parallel` 财务报告和审定财务报表 `serial` 以数组或对象为代表的项目列表上的显示器. 它可选择接受中止函数(每个项目应同步返回),并在出错事件时终止遗留的工作。 内置特定迭代顺序(`ascending` 财务报告和审定财务报表 `descending`)和自定义排序的帮助者也支持,通过 `asynckit.serialOrdered` 方法.

它可以确保同步操作,使行为更加稳定并预防 `Maximum call stack size exceeded` 错误,从同步的延时器.

| 压缩 | 大小 |
| :-- | --: |
| asynckit.js (英语) | 12.34千贝 |
| (原始内容存档于2013-10-12). asynckit.min.js | 4.11千贝 |
| (原始内容存档于2013-10-12). asynckit.min.js.gz | 1.47千贝 |

## 安装

```sh
$ npm install --save asynckit
```

## 实例

### 平行任务

平行运行所提供数组的浏览器 。 存储输出于 `result` 阵列, 在匹配位置上。 如果其中之一出错的可能性不大, 将终止其它活动任务( 如果提供了中止功能) 并返回错误和已保存的数据到主调用函数.

#### 输入阵列

```javascript
var parallel = require('asynckit').parallel
  , assert   = require('assert')
  ;

var source         = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
  , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
  , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
  , target         = []
  ;

parallel(source, asyncJob, function(err, result)
{
  assert.deepEqual(result, expectedResult);
  assert.deepEqual(target, expectedTarget);
});

// async job accepts one element from the array
// and a callback function
function asyncJob(item, cb)
{
  // different delays (in ms) per item
  var delay = item * 25;

  // pretend different jobs take different time to finish
  // and not in consequential order
  var timeoutId = setTimeout(function() {
    target.push(item);
    cb(null, item * 2);
  }, delay);

  // allow to cancel "leftover" jobs upon error
  // return function, invoking of which will abort this job
  return clearTimeout.bind(null, timeoutId);
}
```

可在 [试验/试验-平行-阵列.js](https://npmcn.com/package/asynckit/test/test-parallel-array.js)。 。 。 .

#### 输入对象

它还支持通过对象列出的命名任务.

```javascript
var parallel = require('asynckit/parallel')
  , assert   = require('assert')
  ;

var source         = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
  , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
  , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ]
  , expectedKeys   = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ]
  , target         = []
  , keys           = []
  ;

parallel(source, asyncJob, function(err, result)
{
  assert.deepEqual(result, expectedResult);
  assert.deepEqual(target, expectedTarget);
  assert.deepEqual(keys, expectedKeys);
});

// supports full value, key, callback (shortcut) interface
function asyncJob(item, key, cb)
{
  // different delays (in ms) per item
  var delay = item * 25;

  // pretend different jobs take different time to finish
  // and not in consequential order
  var timeoutId = setTimeout(function() {
    keys.push(key);
    target.push(item);
    cb(null, item * 2);
  }, delay);

  // allow to cancel "leftover" jobs upon error
  // return function, invoking of which will abort this job
  return clearTimeout.bind(null, timeoutId);
}
```

可在 [测试/测试-平行-对象.js](https://npmcn.com/package/asynckit/test/test-parallel-object.js)。 。 。 .

### 串行任务

依次运行已提供的数组。 存储输出于 `result` 阵列, 在匹配位置上。 如果其中之一出错的可能性不大, 将不再处理清单上的其他项目 并返回错误和已保存的数据到主调用函数.

#### 输入阵列

```javascript
var serial = require('asynckit/serial')
  , assert = require('assert')
  ;

var source         = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
  , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
  , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
  , target         = []
  ;

serial(source, asyncJob, function(err, result)
{
  assert.deepEqual(result, expectedResult);
  assert.deepEqual(target, expectedTarget);
});

// extended interface (item, key, callback)
// also supported for arrays
function asyncJob(item, key, cb)
{
  target.push(key);

  // it will be automatically made async
  // even it iterator "returns" in the same event loop
  cb(null, item * 2);
}
```

可在 [测试/测试-序列-阵列.js](https://npmcn.com/package/asynckit/test/test-serial-array.js)。 。 。 .

#### 输入对象

它还支持通过对象列出的命名任务.

```javascript
var serial = require('asynckit').serial
  , assert = require('assert')
  ;

var source         = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
  , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ]
  , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ]
  , target         = []
  ;

var source         = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 }
  , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 }
  , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ]
  , target         = []
  ;


serial(source, asyncJob, function(err, result)
{
  assert.deepEqual(result, expectedResult);
  assert.deepEqual(target, expectedTarget);
});

// shortcut interface (item, callback)
// works for object as well as for the arrays
function asyncJob(item, cb)
{
  target.push(item);

  // it will be automatically made async
  // even it iterator "returns" in the same event loop
  cb(null, item * 2);
}
```

可在 [测试/测试-连续-对象.js](https://npmcn.com/package/asynckit/test/test-serial-object.js)。 。 。 .

_注:自 _对象_ 是一个 _未订购_ 收集属性, 它可能会产生出出乎意料的结果,并依次重复. 当任务执行的顺序很重要时请使用 `serialOrdered` 方法._

### 顺序序列

传统发展

举个例子 [比较财产](https://npmcn.com/package/asynckit/compare-property) 软件包.

### 流线接口

传统发展

## 想知道更多吗?

更多实例可见于 [测试文件夹](https://npmcn.com/package/asynckit/test/)。 。 。 .

或者打开一个 [问题](https://github.com/alexindigo/asynckit/issues) 提出问题和/或建议.

## 许可证

AsyncKit获得麻省理工学院许可.

## 常见问题

### asynckit 是什么？

最小的 Aync 任务工具库, 有流支持

### 如何安装 asynckit？

在项目目录运行 npm install asynckit，或使用 pnpm add / yarn add / bun add。

### asynckit 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/asynckit 是否存在。

### asynckit 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### asynckit 可以商用吗？

asynckit 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### asynckit 的下载量有多少？

根据 npm 官方下载统计，asynckit 在 2026/10/05 – 2026/11/03 这 30 天内被下载 494,492,418 次，日均约 16,483,081 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### asynckit 还在维护吗？

最新版本 0\.5\.0 发布于 2025/12/18（10 个月前）；至今共发布 5 个版本，其中过去 12 个月发布了 1 个；首次发布于 2016/05/19。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

