|
|
- 'use strict';
-
- function ready(flagOrFunction) {
- this._ready = !!this._ready;
- this._readyCallbacks = this._readyCallbacks || [];
-
- if (arguments.length === 0) {
- // return a promise
- // support `this.ready().then(onready);` and `yield this.ready()`;
- return new Promise(function (resolve) {
- if (this._ready) {
- return resolve();
- }
- this._readyCallbacks.push(resolve);
- }.bind(this));
- } else if (typeof flagOrFunction === 'function') {
- this._readyCallbacks.push(flagOrFunction);
- } else {
- this._ready = !!flagOrFunction;
- }
-
- if (this._ready) {
- this._readyCallbacks.splice(0, Infinity).forEach(function(callback) {
- process.nextTick(callback);
- });
- }
- }
-
- function mixin(object) {
- object.ready = ready;
- }
-
- module.exports = mixin;
- module.exports.mixin = mixin;
|