Вынес while в отдельную функцию.
Есть какие-нибудь противопоказания?
Основной код читаемый получился?
'use strict'
var obj = {count: 0, maxCount: 5};
function isNeedContinue(obj) {
console.log("isNeedContinue", obj, obj.count < obj.maxCount);
return obj.count < obj.maxCount
}
function doAnything() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
obj.count++;
console.log("doAnything", obj.count);
var testError = false;
if (testError && obj.count==3) {
console.log("doAnything Error!");
reject(new Error("err!"));
}
resolve(obj);
}, 500)
})
}
function whilePromise(condition, promise) {
return new Promise(function(resolve, reject) {
var _lastResult;
(function _nextIteration() {
if (condition()) {
//console.log("whilePromise. Next iteration.");
promise().then(function(result) {
_lastResult = result;
_nextIteration();
}, reject);
} else {
//console.log("whilePromise. End");
resolve(_lastResult);
_lastResult = null;
}
})()
})
}
// Основной код
whilePromise(
isNeedContinue.bind(null, obj),
function() {
return doAnything()
.then(function() {
console.log("Что-то еще в цикле...");
return Promise.resolve(obj);
}, Promise.reject.bind(Promise))
}
)
.then(function(res) {
console.log("Что-то после цикла...", res);
})
.catch(function(err) {
console.log("Fail");
throw err;
});