diff --git a/packages/web3-core-requestmanager/src/index.js b/packages/web3-core-requestmanager/src/index.js index f1fab9f8309..9a0dbc78069 100644 --- a/packages/web3-core-requestmanager/src/index.js +++ b/packages/web3-core-requestmanager/src/index.js @@ -157,8 +157,8 @@ RequestManager.prototype.sendBatch = function (data, callback) { return callback(errors.InvalidProvider()); } - var payload = Jsonrpc.getInstance().toBatchPayload(data); - this.provider.send(payload, function (err, results) { + var payload = Jsonrpc.toBatchPayload(data); + this.provider[this.provider.sendAsync ? 'sendAsync' : 'send'](payload, function (err, results) { if (err) { return callback(err); } @@ -241,4 +241,3 @@ module.exports = { Manager: RequestManager, BatchManager: BatchManager }; - diff --git a/test/batch.js b/test/batch.js index 313f2922cc2..187a5dda1ad 100644 --- a/test/batch.js +++ b/test/batch.js @@ -237,6 +237,47 @@ describe('lib/web3/batch', function () { provider.injectBatchResults([result, result2], true); // injects error batch.execute(); }); + + it('should execute batch request with provider that supports sendAsync', function (done) { + + var provider = new FakeIpcProvider(); + var web3 = new Web3(provider); + + provider.sendAsync = provider.send + provider.send = () => { throw new Error('send was called instead of sendAsync') } + var result = '0x126'; + var resultVal = '294'; + var result2 = '0x127'; + var result2Val = '295'; + provider.injectBatchResults([result, result2]); + + var counter = 0; + var callback = function (err, r) { + counter++; + assert.deepEqual(r, resultVal); + }; + + var callback2 = function (err, r) { + assert.equal(counter, 1); + assert.deepEqual(r, result2Val); + done(); + }; + + provider.injectValidation(function (payload) { + var first = payload[0]; + var second = payload[1]; + + assert.equal(first.method, 'eth_getBalance'); + assert.deepEqual(first.params, ['0x0000000000000000000000000000000000000000', 'latest']); + assert.equal(second.method, 'eth_getBalance'); + assert.deepEqual(second.params, ['0x0000000000000000000000000000000000000005', 'latest']); + }); + + var batch = new web3.BatchRequest(); + batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback)); + batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000005', 'latest', callback2)); + batch.execute(); + }); + }); }); -