Получить случайный ключ из базы данных firebase в ionic 4

Я пытаюсь получить случайный ключ, который генерируется, когда я добавляю данные в разделе «Курс» в Firebase. Я использую ionic 4 для своего приложения.

[1] https://imgur.com/a/mcN38Fz

в приведенном ниже коде внутри функции onSubmit последние две строки: у меня была одна переменная, которая содержит UID пользователя с именем «currentUser», и другая переменная, которая должна содержать ключ данных, добавленных «datakey». Я не уверен, каким должен быть полный код для переменной «dataKey», чтобы я мог получить ключ добавленных данных.

Любая помощь ?

import { Component, OnInit } from '@angular/core';
import { Router,ActivatedRoute } from '@angular/router';
import { Validators, FormBuilder, FormGroup, FormControl } from '@angular/forms';
import { FirebaseService } from '../services/firebase.service';
import { AuthService } from '../services/auth.service';

import { AngularFirestore } from '@angular/fire/firestore';
import * as firebase from 'firebase/app';

import { LoadingController } from '@ionic/angular';

@Component({
    selector: 'app-subjects',
    templateUrl: './subjects.page.html',
    styleUrls: ['./subjects.page.scss'],
})
export class SubjectsPage implements OnInit {

    subject_form: FormGroup;
    subjects: Array<any>;
    gradeArray: number[]=[];
    creditHourArray: number[]=[];
    creditHourTot: number=0;
    gpaDisplay: number;
    dataKey: string;


    constructor(
        private authService: AuthService,
        private formBuilder: FormBuilder,
        private firebaseService: FirebaseService,
        private router: Router,
        private route: ActivatedRoute,
        public loadingCtrl: LoadingController,
        public afs: AngularFirestore,

    ) { }
    ngOnInit() {
        if (this.route && this.route.data) {
            this.getData();
          }
          this.resetFields();

        }

        async getData(){
                this.route.data.subscribe(routeData => {
                  routeData['data'].subscribe(data => {
                    this.subjects = data;
                  })
                })
              }

              async presentLoading(loading) {
                return await loading.present();
              }

    resetFields() {
        this.subject_form = this.formBuilder.group({
            subName: new FormControl('', Validators.required),
            subCode: new FormControl('', Validators.required),
            creditHour: new FormControl('', Validators.required),
            grade: new FormControl('', Validators.required)
        });
    }

    onSubmit(value) {

        this.gradeArray.push(value.grade)
        this.creditHourArray.push(value.creditHour)
        let data = {
            subName: value.subName,
            subCode: value.subCode,
            creditHour: value.creditHour,
            grade: value.grade,
        }


        this.creditHourTot= this.creditHourTot + value.creditHour;




        this.firebaseService.createSubjects(data,this.gradeArray,this.creditHourArray)
        this.firebaseService.createGPA(this.gradeArray,this.creditHourArray)
        this.gpaDisplay = this.firebaseService.calGPA(this.gradeArray,this.creditHourArray)
        console.info(this.gpaDisplay);

        let currentUser = firebase.auth().currentUser
        let dataKey = this.afs.collection('people').doc(currentUser.uid).collection('Course')

    }

    goToSemPage() {
        this.router.navigate(["/semesters"]);
    }

    goToSubListPage(){
      this.router.navigate(["/subject-list"]);
    }


    logout() {
        this.authService.doLogout()
            .then(res => {
                this.router.navigate(["/home"]);
            }, err => {
                console.info(err);
            })
    }
}

это код моего метода "createSubjects"

  createSubjects(value,gradeArray,creditHourArray) {
    return new Promise<any>((resolve, reject) => {

      let currentUser = firebase.auth().currentUser; 

      this.afs.collection('people').doc(currentUser.uid).collection('Course').add({
        subName: value.subName,
        subCode: value.subCode,
        creditHour: value.creditHour,
        grade: value.grade
        gpa: this.calGPA(gradeArray,creditHourArray)
      })

      .then(
          res => resolve(res),
          err => reject(err)
      )

    })
  }

ОБНОВЛЕНИЕ: новый метод onSubmit:

onSubmit(value) {

        this.gradeArray.push(value.grade)
        this.creditHourArray.push(value.creditHour)
        let data = {
            subName: value.subName,
            subCode: value.subCode,
            creditHour: value.creditHour,
            grade: value.grade,
        }


        this.creditHourTot= this.creditHourTot + value.creditHour;

        this.firebaseService.createSubjects(data,this.gradeArray,this.creditHourArray).then(
            (val) => { this.datakey = val.id }
        );
        this.firebaseService.createGPA(this.gradeArray,this.creditHourArray)
        this.gpaDisplay = this.firebaseService.calGPA(this.gradeArray,this.creditHourArray)

        console.info(val);

        // let currentUser = firebase.auth().currentUser
        // let datakey = this.afs.collection('people').doc(currentUser.uid).collection('Course')

    }
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
739
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не совсем уверен в своем понимании вашего варианта использования.

Я предполагаю, что ваш метод createSubjects — это тот, в котором вы делаете вызовы firebase для создания «Курса».

Итак, вам нужно вернуть обещание в методе createSubject,

если createSubject возвращает непосредственно обещание firebase, вам просто нужно:

this.firebaseService.createSubjects(data,this.gradeArray,this.creditHourArray).then(
    (val) => { this.datakey = val.id }
);

edit: я изменил «ключ» на «id», ключ — это то, что вы получаете в firebase, в firestore используется «id».

Я попытался настроить строку и распечатать значение datakey на консоли, оно показывает, что значение не определено. Я изменил вопрос, чтобы он содержал код метода createSubject.

Mohammed Hadi 10.04.2019 09:26

Вместо того, чтобы смотреть, что такое ключ данных, вы должны были посмотреть, что содержит переменная «(val)»: вы можете увидеть, набрав: console.info(val); в двух скобках

Raphael St 10.04.2019 11:50

Я сделал это ... и ошибка «Не удается найти имя« val »: вы имели в виду eval?» появился .. Я скорректировал вопрос, чтобы он содержал новый код для метода «onSubmit».

Mohammed Hadi 10.04.2019 17:49

Привет, вам нужно утешить между { } из .then()

Raphael St 10.04.2019 18:03

Эй ... это тоже не сработало ... та же ошибка «Не удается найти имя« val »: вы имели в виду eval?» все еще отображается, и теперь отображается новая ошибка «Аргумент типа« недействителен »не может быть назначен параметру типа« (причина: любая) => PromiseLike<никогда>».

Mohammed Hadi 11.04.2019 10:47

... Я не думаю, что вы поступили правильно: this.firebaseService.createSubjects(data,this.gradeArray,thi‌​s.creditHourArray).t‌​hen( (val) => { console.info(val) ; this .datakey = val.id }); Это покажет вам, возвращает ли ваше обещание что-то, и позволит вам найти свою ошибку.

Raphael St 11.04.2019 10:50

Другие вопросы по теме