Является ли это правильным способом ожидания завершения этой функции sh до ее повторного вызова? (React-Native) - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть функция, которая слушает базу данных Firestore и извлекает некоторые данные в режиме реального времени. Затем он вызывает другую функцию для расчета. Теперь я хочу знать, правильно ли я это делаю, потому что я не хочу, чтобы первая функция вызывала вторую до завершения второй.

_fetchPatientsList() {
    function onResult(QuerySnapshot) { //first function
        this.setState({ dataSource: QuerySnapshot });
        this._calculateLocationDistance(); //second function
    }

    firestore()
        .collection('coolection').doc().collection('public')
        .where('act', '==', 1)
        .orderBy('time', 'asc')
        .limit(10)
        .onSnapshot(onResult, onError);
}

_calculateLocationDistance = () => {
  //some calculations
}

1 Ответ

0 голосов
/ 19 апреля 2020

У меня нет полного контекста о том, что вы создаете, но согласно документам, onSnapshot запускается каждый раз, когда изменяется содержимое документа. Это может или не может быть именно то, что вы хотите.

https://firebase.google.com/docs/firestore/query-data/listen

Если вы просто хотите гарантировать порядок функций, вы можете сделать:

firestore()
        .collection('coolection').doc().collection('public')
        .where('act', '==', 1)
        .orderBy('time', 'asc')
        .limit(10)
        .then(onResult)
        .catch(onError);

или с асинхронным / ожидающим синтаксисом:

try {
  const result = await firestore()
        .collection('coolection').doc().collection('public')
        .where('act', '==', 1)
        .orderBy('time', 'asc')
        .limit(10)

  onResult(result);
} catch (err) {
  onError(err);
}

...