Перебрать массив
Коллеги, доброго времени суток, в очередной раз затупил. Есть пример:
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, то нужно закончить функцию. Прошу помощи))) Как составить эту проверку. Заранее благодарю |
А не проще ли суммировать в переменной ошибочные ответы?
|
laimas, да в том и дело, что этот костыль нужен для того, что бы закончить выполнение функции если сервер отрубается. И ничего лучше)))) кроме того что бы придумать такую логику на коленках не получилось((((
Если я возьму просто сумму или же в принципе складирую fail в переменную или еще что-то, а потом сравню с чем нибудь, то по фэншую)))) это будет не корректно. Надо ловить именно ошибки подряд, Если есть другой способ или идея, буду благодарен за подсказку |
Цитата:
|
(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; } })(); |
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; } но че то не очень помойму(( |
Malleys, я так тоже думал, но тут нет очередности, нужно именно очередность соблюдать еще
|
Что-то я не понимаю. Если надо закончить выполнение функции на неудачные ответы, то какие ответы, те что были в прошлом или текущие? Если текущие, то даже при наличии массива при удачном ответе нужно инициализировать его заново, зачем хранить то, что проверять бессмысленно? А если так, то зачем вообще массив?
|
Цитата:
Возможно вам стоит запустить тот пример несколько раз, поскольку от того API приходят случайные Да!/Нет! и могло не быть подряд 5 Нет! Когда возникает подряд 5 Нет! то запросы обрываются! UPD О да! Следующий запрос начинает только после завершения предыдущего! |
коллеги, спасибо. Вопрос решен. Большое всем спасибо. Задача конечно специфичная, но тем не менее.
|
Часовой пояс GMT +3, время: 01:51. |