| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | 
							- 'use strict';
 
- var errcode = require('err-code');
 
- var retry = require('retry');
 
- var hasOwn = Object.prototype.hasOwnProperty;
 
- function isRetryError(err) {
 
-     return err && err.code === 'EPROMISERETRY' && hasOwn.call(err, 'retried');
 
- }
 
- function promiseRetry(fn, options) {
 
-     var temp;
 
-     var operation;
 
-     if (typeof fn === 'object' && typeof options === 'function') {
 
-         // Swap options and fn when using alternate signature (options, fn)
 
-         temp = options;
 
-         options = fn;
 
-         fn = temp;
 
-     }
 
-     operation = retry.operation(options);
 
-     return new Promise(function (resolve, reject) {
 
-         operation.attempt(function (number) {
 
-             Promise.resolve()
 
-             .then(function () {
 
-                 return fn(function (err) {
 
-                     if (isRetryError(err)) {
 
-                         err = err.retried;
 
-                     }
 
-                     throw errcode(new Error('Retrying'), 'EPROMISERETRY', { retried: err });
 
-                 }, number);
 
-             })
 
-             .then(resolve, function (err) {
 
-                 if (isRetryError(err)) {
 
-                     err = err.retried;
 
-                     if (operation.retry(err || new Error())) {
 
-                         return;
 
-                     }
 
-                 }
 
-                 reject(err);
 
-             });
 
-         });
 
-     });
 
- }
 
- module.exports = promiseRetry;
 
 
  |