'a'
mh-two-thousand-and-two
2024-04-12 44d2c92345cd156a59fc327b3060292a282d2893
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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;