{"id":20875895,"url":"https://github.com/saqqdy/axios-series","last_synced_at":"2025-05-12T15:31:48.598Z","repository":{"id":179779127,"uuid":"660439237","full_name":"saqqdy/axios-series","owner":"saqqdy","description":"A tool to extend axios to return sequentially","archived":false,"fork":false,"pushed_at":"2024-12-16T19:11:47.000Z","size":450,"stargazers_count":3,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-01T07:26:18.448Z","etag":null,"topics":["axios","axios-extend","axios-plugin","orderly","serializer","series","unique","wrapper"],"latest_commit_sha":null,"homepage":"https://www.saqqdy.com/axios-series","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saqqdy.png","metadata":{"files":{"readme":"README-zh_CN.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["saqqdy"]}},"created_at":"2023-06-30T02:38:46.000Z","updated_at":"2024-09-17T11:16:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"b6c4bbe2-1503-49b9-9f71-0266b467443a","html_url":"https://github.com/saqqdy/axios-series","commit_stats":null,"previous_names":["saqqdy/axios-series"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saqqdy%2Faxios-series","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saqqdy%2Faxios-series/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saqqdy%2Faxios-series/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saqqdy%2Faxios-series/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saqqdy","download_url":"https://codeload.github.com/saqqdy/axios-series/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253514645,"owners_count":21920340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axios","axios-extend","axios-plugin","orderly","serializer","series","unique","wrapper"],"created_at":"2024-11-18T06:49:00.519Z","updated_at":"2025-05-12T15:31:48.234Z","avatar_url":"https://github.com/saqqdy.png","language":"TypeScript","funding_links":["https://github.com/sponsors/saqqdy"],"categories":[],"sub_categories":[],"readme":"\u003cdiv style=\"text-align: center;\" align=\"center\"\u003e\n\n# axios-series\n\n一个扩展 axios 按顺序返回的工具，当向同一个接口短时间内发起多次请求时，如果需要确保先执行的请求先返回结果，axios-series 会很有用\n\n[![NPM version][npm-image]][npm-url]\n[![Codacy Badge][codacy-image]][codacy-url]\n[![tree shaking][tree-shaking-image]][tree-shaking-url]\n![typescript][typescript-url]\n[![Test coverage][codecov-image]][codecov-url]\n[![npm download][download-image]][download-url]\n[![gzip][gzip-image]][gzip-url]\n[![License][license-image]][license-url]\n\n[![Sonar][sonar-image]][sonar-url]\n\n\u003c/div\u003e\n\n\u003cdiv style=\"text-align: center; margin-bottom: 20px;\" align=\"center\"\u003e\n\n### **[API 文档](https://www.saqqdy.com/axios-series)** • **[更新日志](./CHANGELOG.md)**\n\n**使用其他语言阅读：[English](./README.md) | 简体中文**\n\n\u003c/div\u003e\n\n## 体验\n\n在线体验 axios-series 功能 [Edit in CodeSandbox](https://codesandbox.io/p/sandbox/github/saqqdy/axios-series/tree/master/examples)\n\n## 安装\n\n```bash\n# 使用pnpm\n$ pnpm install axios-series\n\n# 使用npm\n$ npm install axios-series --save\n```\n\n## 使用\n\n### 为 axios 赋上 serializer 功能\n\n```js\nimport axios from 'axios'\nimport wrapper from 'axios-series'\n\nconst axiosSeries = wrapper(axios, {\n  // unique: false,\n  // orderly: true\n})\n\nexport default axiosSeries\n```\n\n### 或者把 serializer 功能赋在 axios 实例上\n\n```js\nimport axios from 'axios'\nimport wrapper from 'axios-series'\n\nconst instance = axios.create({\n  withCredentials: true\n})\nconst axiosSeries = wrapper(instance, {\n  // unique: false,\n  // orderly: true\n})\n\nexport default axiosSeries\n```\n\n## 使用表现\n\nserializer 的配置\n\n| 参数     | 描述                                            | 类型                                                   | 可选值     | 是否必填 | 默认值 |\n| -------- | ----------------------------------------------- | ------------------------------------------------------ | ---------- | -------- | ------ |\n| unique   | make request unique, clear all similar requests | `boolean`                                              | true/false | false    | false  |\n| orderly  | resolve results orderly                         | `boolean`                                              | true/false | false    | true   |\n| onCancel | callback function for cancel requests           | `(err: any, config: InternalAxiosRequestConfig): void` | -          | false    | null   |\n\n### unique\n\n当向同一个接口(url 一致但 data 可以不一样)同时(或者间隔很短时间)发起多次请求时，可能用户只需要最后一次的请求结果，当 `unique` 设置为 `true` 时，前面的请求会被取消\n\n\u003e 神奇的是：当向同一个接口同时发起多次请求时，axiosSerios 并不是死板地等待上一个接口返回之后才开始请求。所有的请求都是同时发起的，所以 axiosSerios 对于**网页性能是没有损失的**\n\n- 版本: `1.0.0`\n\n- 展示:\n\n```text\n//                                                              |\n//                                                              |\naxiosSeries({ url: '/api/1' }); axiosSeries({ url: '/api/1' }); | axiosSeries({ url: '/api/1' });\n//            \\___________/                   \\___________/     |               \\___________/\n//                  |                               |           |                     |\n//              request 1                       request 2       | When request 3 start, 1 \u0026 2 will be cancelled\n//                                                              |\n```\n\n- 示例:\n\n1. 向 /test/api/1 (data 可以不一样)同时(或者间隔很短时间)发起 3 次请求\n   . 设置 `unique` 为 `true`\n\n```ts\n// 请求 1\naxiosSeries({\n  url: '/test/api/1',\n  data: { id: 1 }\n})\n// 请求 2\naxiosSeries({\n  url: '/test/api/1',\n  data: { id: 2 }\n})\n\n// 请求1会被取消\n```\n\n### orderly\n\n当同时(或者间隔很短时间)向同一个接口(url 一致但 data 可以不一样)请求多次，由于网络原因无法保证先执行的请求先返回结果，这个 `orderly` 参数就是用来解决这个问题的。当`orderly`设置为 true 时，先请求的一定会先于后请求的先返回结果\n\n- 版本: `1.0.0`\n\n- Show:\n\n```text\n//             -\u003e               |                -\u003e               |                -\u003e\n//                              |                                 |\naxiosSeries({ url: '/api/1' }); | axiosSeries({ url: '/api/1' }); | axiosSeries({ url: '/api/1' });\n//            \\___________/     |               \\___________/     |               \\___________/\n//                  |           |                     |           |                     |\n//              request 1       |      request 2 will wait for    |        request 3 will wait for\n//                              |     request 1 before returning  |      request 1 \u0026 2 before returning\n//                              |                                 |\n```\n\n- 示例:\n\n1. 向 /test/api/1 (data 可以不一样)同时(或者间隔很短时间)发起 3 次请求\n   . 设置 `orderly` 为 true\n\n```ts\n// 请求 1\naxiosSeries({\n  url: '/test/api/1',\n  data: { id: 1 }\n})\n// 请求 2\naxiosSeries({\n  url: '/test/api/1',\n  data: { id: 2 }\n})\n\n// 请求1一定会先于请求2返回结果\n```\n\n## API 参考\n\n### axiosSeries\n\naxios serializer 包装器\n\n- 版本: `1.0.0`\n\n- 参数:\n\n| 参数     | 描述                    | 类型                | 可选值              | 是否必填 | 默认值 |\n| -------- | ----------------------- | ------------------- | ------------------- | -------- | ------ |\n| instance | axios or axios instance | `AxiosInstance`     | axios/axiosInstance | true     | -      |\n| options  | serializer options      | `SerializerOptions` | -                   | false    | -      |\n\n- 返回: 返回带 serializer 的 axios 实例\n\n- 示例:\n\n```ts\nconst http = axiosSeries(instance, {\n  // unique: false,\n  // orderly: true\n})\n```\n\n- 类型:\n\n```ts\nfunction axiosWithSeries\u003cT = any, R = AxiosResponse\u003cT\u003e, D = any\u003e(\n  config: SerializerRequestOptions\u003cD\u003e\n): Promise\u003cR\u003e\nfunction axiosWithSeries\u003cT = any, R = AxiosResponse\u003cT\u003e, D = any\u003e(\n  url: string,\n  config?: SerializerRequestOptions\u003cD\u003e\n): Promise\u003cR\u003e\n```\n\n### axiosSeries.clear\n\n清理所有的请求队列\n\n- 版本: `1.0.0`\n\n- 参数: `none`\n\n- 返回: 'none'\n\n- 示例:\n\n```ts\nconst http = axiosSeries(instance, {})\n\nhttp.clear()\n```\n\n- 类型:\n\n```ts\ntype clear = () =\u003e void\n```\n\n### axiosSeries.series\n\n所有的请求队列\n\n- 版本: `1.0.0`\n\n- 参数: `none`\n\n- 返回: 'WaitingList'\n\n- 示例:\n\n```ts\nconst http = axiosSeries(instance, {})\n\nconsole.log(http.series) // []\n```\n\n- 类型:\n\n```ts\ndeclare interface Series {\n  promiseKey: symbol\n  promise: Promise\u003cany\u003e\n  source: CancelTokenSource\n  abortController?: AbortController\n}\n\ndeclare type WaitingList = Record\u003cstring, Series[]\u003e\n```\n\n### 使用 unpkg CDN\n\n```html\n\u003cscript src=\"https://unpkg.com/browse/axios@1.4.0/dist/axios.min.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://unpkg.com/axios-series@1.0.0/dist/index.global.prod.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n  const http = axiosSeries(axios)\n\u003c/script\u003e\n```\n\n## 问题和支持\n\nPlease open an issue [here](https://github.com/saqqdy/axios-series/issues).\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/axios-series.svg?style=flat-square\n[npm-url]: https://npmjs.org/package/axios-series\n[codacy-image]: https://app.codacy.com/project/badge/Grade/f70d4880e4ad4f40aa970eb9ee9d0696\n[codacy-url]: https://www.codacy.com/gh/saqqdy/axios-series/dashboard?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=saqqdy/axios-series\u0026utm_campaign=Badge_Grade\n[tree-shaking-image]: https://badgen.net/bundlephobia/tree-shaking/axios-series\n[tree-shaking-url]: https://bundlephobia.com/package/axios-series\n[typescript-url]: https://badgen.net/badge/icon/typescript?icon=typescript\u0026label\n[codecov-image]: https://img.shields.io/codecov/c/github/saqqdy/axios-series.svg?style=flat-square\n[codecov-url]: https://codecov.io/github/saqqdy/axios-series?branch=master\n[download-image]: https://img.shields.io/npm/dm/axios-series.svg?style=flat-square\n[download-url]: https://npmjs.org/package/axios-series\n[gzip-image]: http://img.badgesize.io/https://unpkg.com/axios-series/dist/index.global.prod.js?compression=gzip\u0026label=gzip%20size:%20JS\n[gzip-url]: http://img.badgesize.io/https://unpkg.com/axios-series/dist/index.global.prod.js?compression=gzip\u0026label=gzip%20size:%20JS\n[license-image]: https://img.shields.io/badge/License-MIT-blue.svg\n[license-url]: LICENSE\n[sonar-image]: https://sonarcloud.io/api/project_badges/quality_gate?project=saqqdy_axios-series\n[sonar-url]: https://sonarcloud.io/dashboard?id=saqqdy_axios-series\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaqqdy%2Faxios-series","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaqqdy%2Faxios-series","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaqqdy%2Faxios-series/lists"}