Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.04.2019, 09:18
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 276

Перебрать массив
Коллеги, доброго времени суток, в очередной раз затупил. Есть пример:

let fail = 10;
let requestsArr =[0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0];


Смысл такой, выполняется функция, которая отправляет куда то запросы и получает ответы. Каждый элемент массива это ответ от сервера. 0 - это пустой ответ или ошибка, 1 - это ОК. Так вот мне нужно составить проверку, если у меня fail раз подряд пришел от сервера 0, то нужно закончить функцию.

Прошу помощи))) Как составить эту проверку. Заранее благодарю
Ответить с цитированием
  #2 (permalink)  
Старый 24.04.2019, 09:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 10,440

А не проще ли суммировать в переменной ошибочные ответы?
Ответить с цитированием
  #3 (permalink)  
Старый 24.04.2019, 09:28
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 276

laimas, да в том и дело, что этот костыль нужен для того, что бы закончить выполнение функции если сервер отрубается. И ничего лучше)))) кроме того что бы придумать такую логику на коленках не получилось((((

Если я возьму просто сумму или же в принципе складирую fail в переменную или еще что-то, а потом сравню с чем нибудь, то по фэншую)))) это будет не корректно. Надо ловить именно ошибки подряд,

Если есть другой способ или идея, буду благодарен за подсказку
Ответить с цитированием
  #4 (permalink)  
Старый 24.04.2019, 09:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 10,440

Сообщение от Роман Андреевич
Надо ловить именно ошибки подряд
Что вам мешает при удачном ответе и ошибках, к примеру равным 3 подряд до этого удачного ответа, сбрасывать счетчик ошибок в ноль?
Ответить с цитированием
  #5 (permalink)  
Старый 24.04.2019, 09:56
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 858

(async () => {
	var fails = 0;

	for(let i = 0, len = 50; i < len; i++) {
		const { answer } = await fetch("https://yesno.wtf/api").then(response => response.json(), () => ({}));
		const ok = answer === "yes";

		if(ok) {
			fails = 0;
		} else {
			fails++;
		}

		console.log(i, ok);

		if(fails === 5) break;
	}
})();
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2019, 09:57
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 276

laimas, вопрос как взять несколько элементов массива подряд и проверить их значение. Последнее это не нужно.

Пока ничего лучше не придумал((( делать через рекурсию, вот пример:

t failRulle= 10;

let arr = [0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0];
let items = [];

if (arr.length > failRulle) {

	check(arr, result => {

		if (result) console.log('Обрываем');

	});

}

function check(array, callback) {

	if (!array.length) {

		callback();

	} else {

		let item = array.shift();

		if (item !== 1) {

			check(array, callback);

		} else {

			for (let i = 0; i < array.length; i++) {
		
				if (arr[i] === item) {

					items = arr.splice(i, failRulle);

				}

				let fail = checkFails(items);

				(fail) ? callback(true) : check(array, callback);

			}

		}

	}

}

function checkFails(array) {
	
	let fails = [];

	array.forEach(item => {

		if (item === 1) fails.push(item);

	});

	return (fails.length === failRulle) ? true : false;

}


но че то не очень помойму((
Ответить с цитированием
  #7 (permalink)  
Старый 24.04.2019, 10:02
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 276

Malleys, я так тоже думал, но тут нет очередности, нужно именно очередность соблюдать еще
Ответить с цитированием
  #8 (permalink)  
Старый 24.04.2019, 10:09
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 10,440

Что-то я не понимаю. Если надо закончить выполнение функции на неудачные ответы, то какие ответы, те что были в прошлом или текущие? Если текущие, то даже при наличии массива при удачном ответе нужно инициализировать его заново, зачем хранить то, что проверять бессмысленно? А если так, то зачем вообще массив?
Ответить с цитированием
  #9 (permalink)  
Старый 24.04.2019, 10:12
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 858

Сообщение от Роман Андреевич
Malleys, я так тоже думал, но тут нет очередности, нужно именно очередность соблюдать еще
Вы лжёте! Если бы это было не так, то вы бы не читали этот ответ!

Возможно вам стоит запустить тот пример несколько раз, поскольку от того API приходят случайные Да!/Нет! и могло не быть подряд 5 Нет! Когда возникает подряд 5 Нет! то запросы обрываются!

UPD О да! Следующий запрос начинает только после завершения предыдущего!

Последний раз редактировалось Malleys, 24.04.2019 в 10:19.
Ответить с цитированием
  #10 (permalink)  
Старый 24.04.2019, 10:38
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 276

коллеги, спасибо. Вопрос решен. Большое всем спасибо. Задача конечно специфичная, но тем не менее.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление объекта в массив в цикле Dark19 Элементы интерфейса 3 11.12.2016 22:11
Перебрать массив и вытащить значения Gerd199 Общие вопросы Javascript 5 14.03.2016 17:35
Нужно перебрать элементы добавить их в массив и добавить к элементам класс Сергей_FE Оффтопик 8 30.08.2015 17:06
Перебрать массив daMage Events/DOM/Window 4 05.10.2010 14:15
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 18:14