sdk-base --------------- [![NPM version][npm-image]][npm-url] [![build status][travis-image]][travis-url] [![Test coverage][coveralls-image]][coveralls-url] [![David deps][david-image]][david-url] [![npm download][download-image]][download-url] [npm-image]: https://img.shields.io/npm/v/sdk-base.svg?style=flat-square [npm-url]: https://npmjs.org/package/sdk-base [travis-image]: https://img.shields.io/travis/node-modules/sdk-base.svg?style=flat-square [travis-url]: https://travis-ci.org/node-modules/sdk-base [coveralls-image]: https://img.shields.io/coveralls/node-modules/sdk-base.svg?style=flat-square [coveralls-url]: https://coveralls.io/r/node-modules/sdk-base?branch=master [david-image]: https://img.shields.io/david/node-modules/sdk-base.svg?style=flat-square [david-url]: https://david-dm.org/node-modules/sdk-base [download-image]: https://img.shields.io/npm/dm/sdk-base.svg?style=flat-square [download-url]: https://npmjs.org/package/sdk-base A base class for sdk with some common & useful functions. ## Installation ```bash $ npm install sdk-base ``` ## Usage Constructor argument: - {Object} options - {String} [initMethod] - the async init method name, the method should be a generator function or a function return promise. If set, will execute the function in the constructor. ```js 'use strict'; const co = require('co'); const Base = require('sdk-base'); class Client extends Base { constructor() { super({ initMethod: 'init', }); } * init() { // put your async init logic here } // support async function too // async init() { // // put your async init logic here // } } co(function* () { const client = new Client(); // wait client ready, if init failed, client will throw an error. yield client.ready(); // support generator event listener client.on('data', function* (data) { // put your async process logic here // // @example // ---------- // yield submit(data); }); client.emit('data', { foo: 'bar' }); }).catch(err => { console.error(err); }); ``` ### API - `.ready(flagOrFunction)` flagOrFunction is optional, and the argument type can be Boolean, Error or Function. ```js // init ready client.ready(true); // init failed client.ready(new Error('init failed')); // listen client ready client.ready(err => { if (err) { console.log('client init failed'); console.error(err); return; } console.log('client is ready'); }); // support promise style call client.ready() .then(() => { ... }) .catch(err => { ... }); // support generator style call yield client.ready(); ``` - `.isReady getter` detect client start ready or not. - `.on(event, listener)` wrap the [EventEmitter.prototype.on(event, listener)](https://nodejs.org/api/events.html#events_emitter_on_eventname_listener), the only difference is to support adding generator listener on events, except 'error' event. - `once(event, listener)` wrap the [EventEmitter.prototype.once(event, listener)](https://nodejs.org/api/events.html#events_emitter_once_eventname_listener), the only difference is to support adding generator listener on events, except 'error' event. - `prependListener(event, listener)` wrap the [EventEmitter.prototype.prependListener(event, listener)](https://nodejs.org/api/events.html#events_emitter_prependlistener_eventname_listener), the only difference is to support adding generator listener on events, except 'error' event. - `prependOnceListener(event, listener)` wrap the [EventEmitter.prototype.prependOnceListener(event, listener)](https://nodejs.org/api/events.html#events_emitter_prependoncelistener_eventname_listener), the only difference is to support adding generator listener on events, except 'error' event. - `addListener(event, listener)` wrap the [EventEmitter.prototype.addListener(event, listener)](https://nodejs.org/api/events.html#events_emitter_addlistener_eventname_listener), the only difference is to support adding generator listener on events, except 'error' event. ```js client.on('data', function* (data) { // your async process logic here }); client.once('foo', function* (bar) { // ... }); // listen error event client.on('error', err => { console.error(err.stack); }); ``` - `.await(event)`: [await an event](https://github.com/cojs/await-event), return a promise, and it will resolve(reject if event is `error`) once this event emmited. ```js co(function* () { const data = yield client.await('data'); }); ``` - `.awaitFirst(event)`: [await the first event in a set of event pairs](https://github.com/node-modules/await-first), return a promise, and it will clean up after itself. ```js co(function* () { const o = yield client.awaitFirst([ 'foo', 'bar' ]); if (o.event === 'foo') { // ... } if (o.event === 'bar') { // ... } }); ``` - `._close()`: The `_close()` method is called by `close`, It can be overridden by child class, but should not be called directly. It must return promise or generator. - `.close()`: The `close()` method is used to close the instance. ### License [MIT](LICENSE)