@vetsmen

Почему не работает break в цикле?

Почему не работает break в данном коде?
for(var i = 1; i < 9; i++) {
			client.hgetall('space' + i, function(err, obj) {
			    break;
			});
		};

client.hgetall - это редис.
Пишет:
SyntaxError: Illegal break statement
Как я предполагаю, это все из-за асинхронности? Если да, то что именно нужно будет тут обернуть в промисы?
  • Вопрос задан
  • 2268 просмотров
Решения вопроса 1
@Aves
Можно и без промисов, на обычных колбеках:
function asyncLoop(fn, i, end) {
  if (i < end) fn(i, () => asyncLoop(fn, i + 1, end));
}

function worker(i, next) {
  client.hgetall('space' + i, (err, obj) => {
    if (err) return; // break
    next();
  });
}

asyncLoop(worker, 0, 9);

На промисах примерно так:
let p = Promise.resolve();
for (let i = 0; i < 9; i++) {
  p = p.then(() => new Promise((resolve, reject) => {
    client.hgetall('space' + i, (err, obj) => {
      if (err) reject(err); // break
      else resolve();
    });
  }));
}
p.catch(err => console.error(err));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
Вам написали, что нельзя там использовать break. break используется для прерывания цикла, но вы его используете в анонимной функции, которая будет вызвана где-то там в другой части кода. В данном случае, вам надо думать как обойтись без break, например сделать функцию обертку, которая будет решать, вызывать этот код или нет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы