Вы возвращаетесь за пределы вашего subscription
, поэтому, пока ваш subscription
собирается и выбирает данные, и выполняет вычисления, вы уже вернулись.Возвращение внутрь подписки также не очень хорошая идея.И где вы ожидаете увидеть return
?Что такое valueChanges()
.subscribe
вернет Subscription
.Почему бы вам не сделать result
переменной класса и напрямую назначить ее в своей подписке следующим образом:
this.result = this.CalculateGPA(resultsArr);
Теперь, если вам действительно нужно вернуться из этого метода, тогда не subscribe
, а вместо этого выполните map
и:
return this.getScales(userId).valueChanges().map(() => {
...
return result
...
})
, а затем вам нужно subscribe
к возвращенному значению.
РЕДАКТИРОВАТЬ
Я только что видел, что вы размещали подписки одна за другой одним способом: calculateSemesterGPA(semesterId: string, userId: string) {}
.Мы не можем сказать, какая подписка будет успешной в первую очередь.Пожалуйста, вложите вторую подписку под первой, чтобы вы действительно были уверены, что вторая запускается только после завершения первой.
this.getSemesterGrades(semesterId).valueChanges()
.subscribe(snapshots => {
snapshots.forEach(snapshot => {
gradesArr.push(snapshot.grade)
});
this.getScales(userId).valueChanges()
.subscribe(snapshots => {
snapshots.forEach(snapshot => {
for(let i = 0; i < gradesArr.length; i++) {
if(gradesArr[i] === snapshot.letter) {
resultsArr.push(snapshot.points);
}
}
this.result = this.CalculateGPA(resultsArr)
});
})
});