# p-fifo

> Promised First-In-First-Out buffer. Await on push to be told when a value is consumed and await on shift for a value to consume when the buffer is empty.

Latest version **1.0.0** (published 2019-07-31) · MIT license · 0 weekly downloads

## Install

```sh
npm install p-fifo
pnpm add p-fifo
yarn add p-fifo
bun add p-fifo
```

## Health

**Score 23/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.0 |
| Published | 2019-07-31 |
| First published | 2019-07-31 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/p-fifo) |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 6.6 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Alan Shaw |
| Maintainers | alanshaw |
| Keywords | fifo, buffer, queue, promise, push, shift, array |

## Links

- npm: https://www.npmjs.com/package/p-fifo
- Repository: https://github.com/alanshaw/p-fifo
- Homepage: https://github.com/alanshaw/p-fifo#readme
- Issues: https://github.com/alanshaw/p-fifo/issues
- npm.io page: https://npm.io/package/p-fifo

## Dependencies (2)

- [p-defer](https://npm.io/package/p-defer.md) ^3.0.0
- [fast-fifo](https://npm.io/package/fast-fifo.md) ^1.0.0

## Alternatives

- [cron](https://npm.io/package/cron.md) — 4.9M weekly downloads
- [@vercel/queue](https://npm.io/package/@vercel/queue.md) — 731.6K weekly downloads
- [create-sonicjs](https://npm.io/package/create-sonicjs.md) — 1.6K weekly downloads
- [@exellix/jobs-api](https://npm.io/package/@exellix/jobs-api.md) — 941 weekly downloads
- [@forwardimpact/libskill](https://npm.io/package/@forwardimpact/libskill.md) — 575 weekly downloads

## Recent versions

- 1.0.0 (latest) — 2019-07-31

## README

# p-fifo

[![Build Status](https://travis-ci.org/alanshaw/p-fifo.svg?branch=master)](https://travis-ci.org/alanshaw/p-fifo)
[![dependencies Status](https://david-dm.org/alanshaw/p-fifo/status.svg)](https://david-dm.org/alanshaw/p-fifo)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)

> Promised First-In-First-Out buffer. Await on push to be told when a value is consumed and await on shift for a value to consume when the buffer is empty

## Install

```sh
npm i p-fifo
```

## Usage

### Await on push

`await` on push to be told when your pushed value is consumed:

```js
const Fifo = require('p-fifo')
const fifo = new Fifo()

// Consume a value from the buffer after 1 second
setTimeout(() => fifo.shift(), 1000)

console.time('push')
// Nothing in the buffer, push a value and wait for it to be consumed
await fifo.push('hello')
console.log('"hello" was consumed')
console.timeEnd('push')

// Output:
// "hello" was consumed
// push: 1006.723ms
```

### Await on shift

If the buffer is empty, you can `await` on a value to be pushed:

```js
const Fifo = require('p-fifo')
const fifo = new Fifo()

// Push a value into the buffer after 1 second
setTimeout(() => fifo.push('hello'), 1000)

console.time('shift')
// Nothing in the buffer, wait for something to arrive
const value = await fifo.shift()
console.log(`consumed "${value}" from the buffer`)
console.timeEnd('shift')

// Output:
// consumed "hello" from the buffer
// shift: 1002.652ms
```

## API

```js
const fifo = new Fifo()
```

### `fifo.push(value): Promise`

Add a value to the end of the FIFO buffer.

Returns a promise that is resolved when the pushed value is shifted off the start of the buffer.

### `fifo.shift(): Promise<Any>`

Remove the first value from the FIFO buffer and return that removed value in a promise.

Returns a promise that resolves to a value from start of the FIFO buffer. If there are no values in the buffer the promise will resolve when a value is next pushed.

Note that multiple calls to shift when the buffer is empty will not resolve to the same value i.e. a corresponding number of calls to `push` will need to be made to resolve all the promises returned by calls to `shift`.

### `fifo.isEmpty(): Boolean`

Returns `true` if the FIFO buffer is empty and `false` otherwise.

## Contribute

Feel free to dive in! [Open an issue](https://github.com/alanshaw/p-fifo/issues/new) or submit PRs.

## License

[MIT](LICENSE) © Alan Shaw

---
_Source: https://npm.io/package/p-fifo · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
