ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   [JS] NeDB дождаться выполнения колбэка (https://forum.antichat.xyz/showthread.php?t=768359)

Mizuwokiru 17.04.2017 06:15

В общем при разработке приложеньки столкнулся с одной проблемой. В проекте использую 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);
  }

Как дождаться его выполнения, а затем вернуть результат?

Mizuwokiru 17.04.2017 20:14

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

Код:


Код:

window.subjects.insert({name: subjectName}, (err, newDoc) => {
        if (err)
          console.err(err.message);
        this.setState({activeModal: questionsModals.NONE});
      });



Время: 18:19