Skip to content

Commit

Permalink
fix: Bug with logEvent callbacks not being called when unsent events …
Browse files Browse the repository at this point in the history
…are dropped (#342)

* fixes #142

* fix error handling

* revert commit

* extend callback interface

* fix callback call for deleted events

* Added tests

* single letter variable nit

Co-authored-by: Donald Pipowitch <pipo@senaeh.de>
  • Loading branch information
jooohhn and donaldpipowitch committed Jan 8, 2021
1 parent 7f8631e commit f243a92
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
12 changes: 10 additions & 2 deletions src/amplitude-client.js
Expand Up @@ -1384,7 +1384,14 @@ var _generateApiPropertiesTrackingConfig = function _generateApiPropertiesTracki
*/
AmplitudeClient.prototype._limitEventsQueued = function _limitEventsQueued(queue) {
if (queue.length > this.options.savedMaxCount) {
queue.splice(0, queue.length - this.options.savedMaxCount);
const deletedEvents = queue.splice(0, queue.length - this.options.savedMaxCount);
deletedEvents.forEach((event) => {
if (type(event.callback) === 'function') {
event.callback(0, 'No request sent', {
reason: 'Event dropped because options.savedMaxCount exceeded. User may be offline or have a content blocker',
});
}
});
}
};

Expand All @@ -1394,6 +1401,7 @@ AmplitudeClient.prototype._limitEventsQueued = function _limitEventsQueued(queue
* @callback Amplitude~eventCallback
* @param {number} responseCode - Server response code for the event / identify upload request.
* @param {string} responseBody - Server response body for the event / identify upload request.
* @param {object} details - (optional) Additional information associated with sending event.
*/

/**
Expand Down Expand Up @@ -1684,7 +1692,7 @@ AmplitudeClient.prototype.sendEvents = function sendEvents() {
// here.
// }
} catch (e) {
// utils.log('failed upload');
// utils.log.error('failed upload');
}
});
};
Expand Down
27 changes: 27 additions & 0 deletions test/amplitude-client.js
Expand Up @@ -1945,6 +1945,33 @@ describe('AmplitudeClient', function () {
assert.equal(message, 'success');
});

it.only('should run the callback even with a dropped unsent event', function () {
amplitude.init(apiKey, null, { savedMaxCount: 1 });
var counter = 0;
var value = null;
var message = null;
var reason = null;
var callback = function (status, response, details) {
counter++;
value = status;
message = response;
reason = details.reason;
};
amplitude.logEvent('DroppedEvent', {}, callback);
amplitude.logEvent('SavedEvent', {}, callback);
server.respondWith([0, {}, '']);
server.respond();

// verify callback fired
assert.equal(counter, 1);
assert.equal(value, 0);
assert.equal(message, 'No request sent');
assert.equal(
reason,
'Event dropped because options.savedMaxCount exceeded. User may be offline or have a content blocker',
);
});

it('should run callback once and only after 413 resolved', function () {
var counter = 0;
var value = -1;
Expand Down

0 comments on commit f243a92

Please sign in to comment.