UNPKG

convertionanalytics-tracking

Version:

Track events - custom user actions, clicks, pageviews, purchases.

57 lines (49 loc) 1.37 kB
import 'promise-polyfill/src/polyfill'; import 'whatwg-fetch'; import configDefault from '../config-default.js'; export default function(url, options) { const config = { ...configDefault, ...(options.retry || {}) }; const retriesLimit = config.retry.limit; const retryInitialDelay = config.retry.initialDelay; const retryOn = config.retry.retryOnResponseStatuses; let retriesCount = 0; if (retryOn && !(retryOn instanceof Array)) { throw { name: 'ArgumentError', message: 'retryOn property expects an array' } } return new Promise(function(resolve, reject) { const wrappedFetch = function(n) { fetch(url, options) .then(function(response) { if (retryOn.indexOf(response.status) === -1) { resolve(response); } else { if (n > 0) { retry(); } else { reject(response); } } }) .catch(function(error) { if (n > 0) { retry(); } else { reject(error); } }); }; function retry() { retriesCount = retriesCount + 1; setTimeout(function() { wrappedFetch(retriesLimit - retriesCount); }, 2^retriesCount * retryInitialDelay); } wrappedFetch(retriesLimit - retriesCount); }); };