24.04.2019, 09:18
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
Перебрать массив
Коллеги, доброго времени суток, в очередной раз затупил. Есть пример:
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, то нужно закончить функцию.
Прошу помощи))) Как составить эту проверку. Заранее благодарю
|
|
24.04.2019, 09:22
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
А не проще ли суммировать в переменной ошибочные ответы?
|
|
24.04.2019, 09:28
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
laimas, да в том и дело, что этот костыль нужен для того, что бы закончить выполнение функции если сервер отрубается. И ничего лучше)))) кроме того что бы придумать такую логику на коленках не получилось((((
Если я возьму просто сумму или же в принципе складирую fail в переменную или еще что-то, а потом сравню с чем нибудь, то по фэншую)))) это будет не корректно. Надо ловить именно ошибки подряд,
Если есть другой способ или идея, буду благодарен за подсказку
|
|
24.04.2019, 09:31
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Роман Андреевич
|
Надо ловить именно ошибки подряд
|
Что вам мешает при удачном ответе и ошибках, к примеру равным 3 подряд до этого удачного ответа, сбрасывать счетчик ошибок в ноль?
|
|
24.04.2019, 09:56
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
(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;
}
})();
|
|
24.04.2019, 09:57
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
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;
}
но че то не очень помойму((
|
|
24.04.2019, 10:02
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
Malleys, я так тоже думал, но тут нет очередности, нужно именно очередность соблюдать еще
|
|
24.04.2019, 10:09
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Что-то я не понимаю. Если надо закончить выполнение функции на неудачные ответы, то какие ответы, те что были в прошлом или текущие? Если текущие, то даже при наличии массива при удачном ответе нужно инициализировать его заново, зачем хранить то, что проверять бессмысленно? А если так, то зачем вообще массив?
|
|
24.04.2019, 10:12
|
|
Профессор
|
|
Регистрация: 20.12.2009
Сообщений: 1,714
|
|
Сообщение от Роман Андреевич
|
Malleys, я так тоже думал, но тут нет очередности, нужно именно очередность соблюдать еще
|
Вы лжёте! Если бы это было не так, то вы бы не читали этот ответ!
Возможно вам стоит запустить тот пример несколько раз, поскольку от того API приходят случайные Да!/Нет! и могло не быть подряд 5 Нет! Когда возникает подряд 5 Нет! то запросы обрываются!
UPD О да! Следующий запрос начинает только после завершения предыдущего!
Последний раз редактировалось Malleys, 24.04.2019 в 10:19.
|
|
24.04.2019, 10:38
|
Профессор
|
|
Регистрация: 12.08.2016
Сообщений: 299
|
|
коллеги, спасибо. Вопрос решен. Большое всем спасибо. Задача конечно специфичная, но тем не менее.
|
|
|
|