Обещание возвращается неопределенным при использовании Angularfire - PullRequest
0 голосов
/ 04 марта 2020

Я использую Angularfire для поиска по списку записей в базе данных Firebase и извлечения той, которая соответствует указанной c дате.

async getDay(date: firestore.Timestamp): Promise<firestore.DocumentReference> {
    return await new Promise<firestore.DocumentReference>(function (resolve, reject) {
      let dayRef = this.db.collection('days');
      let allDays = dayRef.get();
      allDays.forEach(doc => {
        doc.forEach(inner => {
          if (JSON.stringify(inner.data()["date"]) == JSON.stringify(date)) {
            resolve(inner.ref);
          }
        })
      })
    });
  }

Параметр date определенно поступает в в качестве правильной даты, и я уже подтвердил, что метод действительно находит правильный документ в «доступном» формате. Однако когда я пытаюсь прочитать обещание, которое возвращает этот метод, он всегда выдает ERROR Error: "Uncaught (in promise): TypeError: this is undefined. Метод, которым я пытаюсь получить и использовать Обещание, приведен ниже.

  async getDay() {
    let ref = this.db.getDay(this.dateFirebase);
    ref.then(out => {
      console.log("out" + out);
    });
  }

Моя другая попытка была, вероятно, намного более запутанной.

  async getDay(date: firestore.Timestamp) : Promise<firestore.DocumentReference> {
    let dayRef = await this.db.collection('days');
    let allDays = await dayRef.get();
    await allDays.forEach(doc => {
      doc.forEach(inner => {
        if(JSON.stringify(inner.data()["date"]) == JSON.stringify(date)) {
          let promise = new Promise(function(resolve, reject) {
            resolve(inner.ref);
          });

          return promise;
        }
      })
    })
    return undefined;
  }

Я почти уверен, что это ужасно код. Когда я попробовал описанное выше, я мог вернуть что-то методу получения, который был пустым объектом, содержащим поля с именами zone_symbol__state и zone_symbol__value. ref также вышел как неопределенный.

Я чувствую, что упускаю что-то очень простое в обещаниях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...