HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 17.04.2017, 06:15
Mizuwokiru
Постоянный
Регистрация: 07.04.2015
Сообщений: 960
С нами: 5842272

Репутация: 1039


По умолчанию

В общем при разработке приложеньки столкнулся с одной проблемой. В проекте использую React и NeDB. Фишка в том, что в NeDB все функции выполняются асинхронно и в момент получения результата функция-колбэк еще выполняется, то есть полноценный результат возвращается уже после отрисовки изменений DOM-дерева. Мне же нужно дождаться, пока функция выполнится, чтобы затем отобразить результат на странице.

Вот функция, которая используется для получения всех документов из БД:

Код:


Код:
export function getAllQuestions() {
  let questionList = [];
  window.questions.find({}, function (err, docs) {
    docs.forEach((value) => {
      questionList.push(value.name);
      console.log(value);
    }, this);
  });

  return questionList;
}
Затем в компоненте в функции render я сначала получаю результат:

Код:


Код:
const questionList = getAllQuestions();
А затем собственно возвращаю React-элемент.

Проблема кроется именно в колбэке:

Код:


Код:
function (err, docs) {
    docs.forEach((value) => {
      questionList.push(value.name);
      console.log(value);
    }, this);
  }
Как дождаться его выполнения, а затем вернуть результат?
 
Ответить с цитированием

  #2  
Старый 17.04.2017, 20:14
Mizuwokiru
Постоянный
Регистрация: 07.04.2015
Сообщений: 960
С нами: 5842272

Репутация: 1039


По умолчанию

В общем забил болт на это, теперь внутри колбэка меняю состояние компонента:

Код:


Код:
window.subjects.insert({name: subjectName}, (err, newDoc) => {
        if (err)
          console.err(err.message);
        this.setState({activeModal: questionsModals.NONE});
      });
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема

Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.