Я пытаюсь вернуть все поля из документа из Firebase cloud Firestore. Проблема возникает, когда я sh хочу сохранить этот документ в виде массива на моей странице для использования. В любом случае, я пытаюсь, я не могу взять массив за пределами метода .subscribe (). вне подписки массив не определен. Я предполагаю, что я не понимаю процесс в машинописи.
quiz.service.ts
export interface Quiz{
q1: string;
q2: string;
q3: string;
q4: string;
}
@Injectable({
providedIn: 'root'
})
export class QuizService {
quizss: Quiz[];
quiz: Quiz;
private quizCollection: AngularFirestoreCollection<Quiz>;
private quizs: Observable<Quiz[]>;
constructor(db: AngularFirestore) {
this.quizCollection = db.collection<Quiz>('quiz');
this.quizs = this.quizCollection.snapshotChanges().pipe(
map(actions =>{
return actions.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return{ id, ...data};
});
})
);
}
getQuiz(id){
return this.quizCollection.doc<Quiz>(id).valueChanges().pipe(
map(response => response)
);
}
}
Я получаю неопределенное со следующим в console.log в ngOnInit:
ngOnInit() {
this.route.queryParams.subscribe((res) => {
id = res.name;
});
answerNumber= 0;
this.question2 = this.quizService.getQuiz(id);
console.log("question pull "+ this.question2[0]);
}
returnQuiz( answerNumber) {
this.quizService.getQuiz(id)
.subscribe(res =>{
this.quiz = res;
let newPoint = {
q1: this.quiz.q1,
q2: this.quiz.q2,
q3: this.quiz.q3,
q4: this.quiz.q4,
}
this.question1[0] = newPoint.q1;
this.question1[1] = newPoint.q2;
this.question1[2] = newPoint.q3;
this.question1[3] = newPoint.q4;
return this.question1;
});
}
Я также пробовал это с той же ошибкой в журнале консоли, возвращая неопределенное:
ngOnInit() {
this.route.queryParams.subscribe((res) => {
id = res.name;
});
answerNumber= 0;
this.quizService.getQuiz(id)
.subscribe(res =>{
this.quiz = res;
let newPoint = {
q1: this.quiz.q1,
q2: this.quiz.q2,
q3: this.quiz.q3,
q4: this.quiz.q4,
}
this.question1[0] = newPoint.q1;
this.question1[1] = newPoint.q2;
this.question1[2] = newPoint.q3;
this.question1[3] = newPoint.q4;
});
console.log("question pull "+ this.question1[0]);
}