# ic-promise

> promise class that implemented by isaac

Latest version **1.0.1** (published 2018-12-13) · ISC license · 0 weekly downloads

## Install

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

## Health

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

Positive: no vulnerabilities.

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

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2018-12-13 |
| First published | 2018-12-13 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 8.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | isaac |
| Maintainers | isaacgan |
| Keywords | promise |

## Links

- npm: https://www.npmjs.com/package/ic-promise
- Repository: https://github.com/issaxite/ic-promise
- Homepage: https://github.com/issaxite/ic-promise/blob/master/README.md
- Issues: https://github.com/issaxite/ic-promise/issues
- npm.io page: https://npm.io/package/ic-promise

## Alternatives

- [@commercetools/sync-actions](https://npm.io/package/@commercetools/sync-actions.md) — 25.1K weekly downloads
- [cwait](https://npm.io/package/cwait.md) — 21.4K weekly downloads
- [@ledgerhq/hw-app-cosmos](https://npm.io/package/@ledgerhq/hw-app-cosmos.md) — 4.2K weekly downloads
- [@financial-times/o-loading](https://npm.io/package/@financial-times/o-loading.md) — 2.8K weekly downloads
- [fa](https://npm.io/package/fa.md) — 185 weekly downloads

## Recent versions

- 1.0.1 (latest) — 2018-12-13
- 1.0.0 — 2018-12-13

## README

# ic-promise
a promise class that implemented by isaac

`ic-promise`是一个用于学习的简单`promise library`，它实现了原生promise几乎所有的特征！
目前暂无法实现的有：
1. ic-promise不是一个微任务；

暂时只想到这么一点！

# Install
```
npm i ic-promise
```

# Example
```javascript
const IcPromise = require('ic-promise');
const log = (...rest) => console.log('\n', ...rest);

// normal
new IcPromise((resolve, reject) => {
  log('invoke current self-promise-1.1...');
  setTimeout(() => {
    // reject(new Error('print error'));
    resolve('print current self-promise-1.1...');
  }, 3 * 1000);
})
.then(sender => {
  log('invoke nesting self-promise-1.1...');
  log(sender);
  return new IcPromise((resolve) => {
    setTimeout(() => {
      resolve('print nesting self-promise-1.1...');
    }, 2 * 1000);
  })
  .then((sender) => {
    log('invoke nesting self-promise-1.2...');
    log(sender);
    return 'print nesting self-promise-1.2...';
  })
  .then((sender) => {
    log('invoke nesting self-promise-1.3...');
    log(sender);
    return 'print nesting self-promise-1.3...';
  });
})
.then(sender => {
  log('invoke nesting self-promise-2.1...');
  log(sender);
  return new IcPromise((resolve) => {
    setTimeout(() => {
      resolve('print nesting self-promise-2.1...');
    }, 3 * 1000);
  })
})
.then(sender => {
  log('invoke current self-promise-1.2...');
  log(sender);
})
.catch((err) => {
  log(err);
})
.finally(() => {
  log('finally');
});

// async/await
(async function foo() {
  const data = await new IcPromise((resolve, reject) => {
    setTimeout(() => {
      resolve('isaac');
    }, 3 * 1000);
  })
  .then(sender => {
    return sender;
  })
  .catch((err) => {
    log(err);
  })
  .finally(() => {
    log('finally');
  });
  log(data);
})();

// static methods
IcPromise.resolve('isaac')
  .then((sender) => {
    log(sender);
  });

IcPromise.reject(new Error('isaac'))
  .then((sender) => {
    log(sender);
  })
  .catch((error) => {
    log(error);
  });

IcPromise.all([
  new IcPromise((resolve) => {
    setTimeout(() => {
      resolve(1);
    }, 6000);
  }),
  new IcPromise((resolve, reject) => {
    setTimeout(() => {
      reject(2);
    }, 1000);
  })
  .finally(() => {
    console.log('nesting finally');
  }),
])
.then(senderList => {
  console.log(senderList);
})
.catch((err) => {
  console.log(err);
})
.finally(() => {
  console.log('finally');
});
```

# License

  MIT

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