Я использую 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
также вышел как неопределенный.
Я чувствую, что упускаю что-то очень простое в обещаниях.