# all files / packages/web3-core-requestManager/src/ batch.js

95% Statements 19/20
64.29% Branches 9/14
100% Functions 6/6
95% Lines 19/20

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73

    1×
    1×

    1×
    4×
    4×

    1×
    11×

    1×
    4×
    4×
    4×
    4×
    11×

    11×

    11×
    2×

    9×

    9×

    1×

     /*
        This file is part of web3.js.

        web3.js is free software: you can redistribute it and/or modify
        it under the terms of the GNU Lesser General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        web3.js is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU Lesser General Public License for more details.

        You should have received a copy of the GNU Lesser General Public License
        along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
    */
    /**
     * @file batch.js
     * @author Marek Kotewicz <marek@ethdev.com>
     * @date 2015
     */

    "use strict";

    var Jsonrpc = require('./jsonrpc');
    var errors = require('web3-core-helpers').errors;

    var Batch = function (requestManager) {
        this.requestManager = requestManager;
        this.requests = [];
    };

    /**
     * Should be called to add create new request to batch request
     *
     * @method add
     * @param {Object} jsonrpc requet object
     */
    Batch.prototype.add = function (request) {
        this.requests.push(request);
    };

    /**
     * Should be called to execute batch request
     *
     * @method execute
     */
    Batch.prototype.execute = function () {
        var requests = this.requests;
        this.requestManager.sendBatch(requests, function (err, results) {
            results = results || [];
            requests.map(function (request, index) {
                return results[index] || {};
            }).forEach(function (result, index) {
                Eif (requests[index].callback) {

                    if (result && result.error) {
                        return requests[index].callback(errors.ErrorResponse(result));
                    }

                    Iif (!Jsonrpc.isValidResponse(result)) {
                        return requests[index].callback(errors.InvalidResponse(result));
                    }

                    requests[index].callback(null, (requests[index].format ? requests[index].format(result.result) : result.result));
                }
            });
        });
    };

    module.exports = Batch;