https://github.com/jpwilliams/waitgroup
A tiny version of Golang's WaitGroup with typings, promises, and zero dependencies.
https://github.com/jpwilliams/waitgroup
async golang group promises wait waitgroup
Last synced: about 2 months ago
JSON representation
A tiny version of Golang's WaitGroup with typings, promises, and zero dependencies.
- Host: GitHub
- URL: https://github.com/jpwilliams/waitgroup
- Owner: jpwilliams
- License: mit
- Created: 2019-12-07T13:15:55.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2025-05-30T21:50:12.000Z (11 months ago)
- Last Synced: 2025-10-23T22:48:58.687Z (6 months ago)
- Topics: async, golang, group, promises, wait, waitgroup
- Language: TypeScript
- Homepage:
- Size: 328 KB
- Stars: 12
- Watchers: 1
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README
# @jpwilliams/waitgroup
 [](https://jsr.io/@jpwilliams/waitgroup)


A tiny version of Golang's [WaitGroup](https://golang.org/pkg/sync/#WaitGroup).
- Tiny (<1kB)
- Works with
- Typed
- Zero dependencies 🎉
There are too many package managers 🥲
```sh
# From npm
npm install @jpwilliams/waitgroup
yarn add @jpwilliams/waitgroup
pnpm add @jpwilliams/waitgroup
```
```sh
# From JSR
npx jsr add @jpwilliams/waitgroup
bunx jsr add @jpwilliams/waitgroup
deno add @jpwilliams/waitgroup
yarn dlx jsr add @jpwilliams/waitgroup
pnpm dlx jsr add @jpwilliams/waitgroup
```
```ts
import http from "http";
import { WaitGroup } from "@jpwilliams/waitgroup";
async function main() {
const wg = new WaitGroup();
const urls = [
"http://www.golang.org/",
"http://www.google.com/",
"http://www.somestupidname.com/",
];
urls.forEach((url) => {
// Increment the WaitGroup counter
wg.add(1);
// Fetch the URL
http.get(url, () => {
// Decrement the counter when the GET is complete
wg.done();
});
});
// Wait for all HTTP fetches to complete
await wg.wait();
}
main();
```
For most applications in Node.js, using built-ins like `Promise.all` will work perfectly, but sometimes this can be a really nice abstraction if the promises you have to keep track of are pretty spread out.
See [jpwilliams/waitgroup-deno](https://github.com/jpwilliams/waitgroup-deno)
for a strictly [Deno](https://deno.land/) version, or [@jpwilliams/waitgroup](https://jsr.io/@jpwilliams/waitgroup) on [JSR](https://jsr.io/@jpwilliams/waitgroup).