From 85d0271b86c052f1cbc9625fc3cbc73b3e8f1471 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Fri, 22 Jan 2016 17:47:35 +0100 Subject: [PATCH] Xo#call(method, args).retry(predicate) --- packages/xo-lib/src/index.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/xo-lib/src/index.js b/packages/xo-lib/src/index.js index 81dd75cac..a2ff93e4f 100644 --- a/packages/xo-lib/src/index.js +++ b/packages/xo-lib/src/index.js @@ -37,14 +37,22 @@ export default class Xo extends JsonRpcWebSocketClient { return this._user } - call (method, args) { - return new Promise(resolve => { - if (startsWith(method, 'session.')) { - throw new XoError('session.*() methods are disabled from this interface') - } + call (method, args, i) { + if (startsWith(method, 'session.')) { + return Promise.reject( + new XoError('session.*() methods are disabled from this interface') + ) + } - resolve(super.call(method, args)) + const promise = super.call(method, args) + promise.retry = predicate => promise.catch(error => { + i = (i || 0) + 1 + if (predicate(error, i)) { + return this.call(method, args, i) + } }) + + return promise } signIn (credentials) {