# promise-ifandor

> conditions and lazy promises

Latest version **0.0.11** (published 2015-05-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install promise-ifandor
pnpm add promise-ifandor
yarn add promise-ifandor
bun add promise-ifandor
```

## Health

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

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.11 |
| Published | 2015-05-21 |
| First published | 2015-05-19 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Jonas Colmsjö |
| Maintainers | colmsjo |
| Keywords | lazy, promise, if, and, or, conditional, when |

## Links

- npm: https://www.npmjs.com/package/promise-ifandor
- Repository: https://github.com/colmsjo/promise-ifandor
- Issues: https://github.com/colmsjo/promise-ifandor/issues
- npm.io page: https://npm.io/package/promise-ifandor

## Dependencies (2)

- [promise](https://npm.io/package/promise.md) ^7.0.1
- [lazy-promise](https://npm.io/package/lazy-promise.md) ^3.0.1

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 0.0.11 (latest) — 2015-05-21
- 0.0.10 — 2015-05-21
- 0.0.9 — 2015-05-20
- 0.0.8 — 2015-05-20
- 0.0.7 — 2015-05-20
- 0.0.6 — 2015-05-20
- 0.0.5 — 2015-05-19
- 0.0.4 — 2015-05-19
- 0.0.3 — 2015-05-19
- 0.0.2 — 2015-05-19
- 0.0.1 — 2015-05-19

## README

Lazy promises
=============

This library achieves lazy evaluation when using promises. This is necessary
when statements with side-effects are used with promises.

I want to achieve something that is equivalent to this `p1() && p2()` with
promises (here is `p2` only evaluated if `p1` is false).

Here is an example:

```
> P.deferred(console.log, this, 'hi')
{ then: [Function] }
> P.deferred(console.log, this, 'hi').then()
hi
```

`deferred` takes the arguments `funcArg`, `thisArg` and the arguments
that should be passed to `funcArg`. `deferred.then` will simply do
`funcArg.apply(thisArg, arguments)`

On the other hand, these two statements behave exactly the same way:

```
> Promise.resolve(console.log('hi'));
hi
{}
> Promise.resolve(console.log('hi')).then()
hi
{}
```

Lazy promises functions depend on the
[NodeJS promise library](https://www.npmjs.com/package/promise) but should
work with any Promise/A+ compatible framework.

The library also contain a number of functions for conditional evaluation of
promises. Here are some examples of how the library is used.

like `if(b()) { p() }`. `deferred` ensures that `p` is evaluated only if `b`
is true:
```
promiseIf(deferred(false), deferred(true) )
.then(function(x) {
  assert.equal(x, null, 'promiseIf should be null');
}).catch(console.log)
```

like `p1() && p2()`. `deferred` ensures that `p2` only is evaluated if `p1`
is true:
```
promiseAnd(deferred(true), deferred(true))
.then(function(x) {
  assert.equal(x, true, 'promiseAnd should be true');
}).catch(console.log)

```

like `p1() || p2()`. `deferred` ensures that `p2` only is evaluated if `p1`
is false:
```
promiseOr(deferred(false), deferred(true))
.then(function(x) {  
  assert.equal(x, true, 'promiseOr should be true');
}).catch(console.log)
```

like `!p()`:
```
promiseNot(deferred(null))
.then(function(x) {
  assert.equal(x, true, 'promiseNot should be true');
}).catch(console.log)
```


Contributions & License
-----------------------

All feedback is greatly appreciated! Just create a github issue or fork request.

Thank's to [Forbes Linsey](https://github.com/ForbesLindesay) for valuable
input.

License: MIT

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