こちら のDeferred版。jQuery.deferredでも、Javascript標準のPromiseでも使える。
let makeDeferredLoop = (promise, func, args, interval) => {
(function deferredLoop() {
promise.then(() => {
return func(args);
}).catch(() => {
setTimeout(deferredLoop, interval, args);
});
})();
};