diff --git a/js/lighthouse.js b/js/lighthouse.js index 73315cabb..588b924c8 100644 --- a/js/lighthouse.js +++ b/js/lighthouse.js @@ -15,23 +15,27 @@ var lighthouse = { lbry.jsonrpc_call(this.server + this.path, method, params, callback, errorCallback, connectFailedCallback, timeout); }, - search: function(query, callback) { + search: function(query, callback, errorCallback, connectFailedCallback, timeout) { let handleSearchFailed = function(tryNum=0) { if (tryNum > lighthouse._max_search_tries) { - throw new Error(`Could not connect to Lighthouse server. Last server attempted: ${lighthouse.server}`); + if (connectFailedCallback) { + connectFailedCallback(); + } else { + throw new Error(`Could not connect to Lighthouse server. Last server attempted: ${lighthouse.server}`); + } } else { // Randomly choose one of the other search servers to switch to let otherServers = lighthouse.servers.slice(); otherServers.splice(otherServers.indexOf(lighthouse.server), 1); lighthouse.server = otherServers[Math.round(Math.random() * (otherServers.length - 1))]; - lighthouse.call('search', [query], callback, undefined, function() { + lighthouse.call('search', [query], callback, errorCallback, function() { handleSearchFailed(tryNum + 1); }, lighthouse._search_timeout); } } - lighthouse.call('search', [query], callback, undefined, function() { handleSearchFailed() }, lighthouse._search_timeout); + lighthouse.call('search', [query], callback, errorCallback, function() { handleSearchFailed() }, lighthouse._search_timeout); } };