1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- var Class = require('./Class');
- var toArr = require('./toArr');
- var each = require('./each');
- var map = require('./map');
- var noop = require('./noop');
- var some = require('./some');
- exports = Class({
- initialize: function Readiness() {
- this._promises = {};
- this._resolves = {};
- this._states = {};
- },
- signal: function(tasks) {
- var states = this._states;
- each(this._getPromises(toArr(tasks)), function(val) {
- if (!val.state) {
- states[val.task] = true;
- val.resolve();
- }
- });
- },
- isReady: function(tasks) {
- return !some(this._getPromises(toArr(tasks)), function(val) {
- return !val.state;
- });
- },
- ready: function(tasks) {
- var fn =
- arguments.length > 1 && arguments[1] !== undefined
- ? arguments[1]
- : noop;
- return Promise.all(
- map(this._getPromises(toArr(tasks)), function(val) {
- return val.promise;
- })
- ).then(fn);
- },
- _getPromises: function(tasks) {
- var promises = this._promises;
- var resolves = this._resolves;
- var states = this._states;
- return map(tasks, function(task) {
- if (!promises[task]) {
- promises[task] = new Promise(function(resolve) {
- resolves[task] = resolve;
- states[task] = false;
- });
- }
- return {
- task: task,
- promise: promises[task],
- resolve: resolves[task],
- state: states[task]
- };
- });
- }
- });
- module.exports = exports;
|