Показать сообщение отдельно
  #9 (permalink)  
Старый 13.07.2017, 00:55
Интересующийся
Отправить личное сообщение для SergeyERjs Посмотреть профиль Найти все сообщения от SergeyERjs
 
Регистрация: 03.07.2017
Сообщений: 19

Вынес 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;
	});
Ответить с цитированием