Как использовать .every с обратными вызовами внутри - PullRequest
0 голосов
/ 28 января 2020

Допустим, у нас есть список элементов, которые я хочу проверить. Если один из пунктов недействителен, я хочу выйти из функции .every. Посмотрев определение, вы можете выйти из .every, когда один из элементов возвращает false. Но как реализовать такое поведение, когда функция, выполняющая проверку, использует обратные вызовы?

resultList.every(function (item) {
  return doCheck(item)
});

doCheck(item){
  _checkDBforValidEntry(item, function (err) {
     if (err) {
       return false;
    }else{
       return true;
    }
 });
}

Это простой (и, возможно, не полный) пример, но он демонстрирует мою проблему. Кажется, это не работает так, как я ожидал. Неправильно ли сделаны утверждения? Это созвездие, которое не работает вообще? Как я могу исправить эту проблему?

1 Ответ

2 голосов
/ 28 января 2020

Promisify doCheck, затем используйте Promise.all, который выбрасывает, как только одна итерация имеет ошибку:

const doCheck = (item) => new Promise((resolve, reject) => {
  _checkDBforValidEntry(item, function (err) {
     if (err) {
       reject();
    }else{
       resolve();
    }
 });
};
Promise.all(resultList.map(doCheck))
  .then(() => {
    // Everything successful
  })
  .catch(() => {
    // At least one failure
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...