Не удалось вернуть ошибку при вызове функции внутри Typescript - PullRequest
0 голосов
/ 04 мая 2020

Привет, я пытаюсь получить код возврата ошибки в вызывающую функцию внутри ioni c, но я не могу вернуть ошибку из вызываемой функции.

Вот моя главная страница, где функция называется:

let result:any = await this.authService.SignUp(
        this.registerForm.value["name"], 
        this.registerForm.value["phone"],
        this.registerForm.value["email"], 
        this.registerForm.value["password"],
        this.attorneyId
      );
      if (result && result.code) {
        console.log('Register Page Error', result.code); //NOT GETTING RESULT HERE 
        this.alertService.showErrorMessage(result.code);

      }

вот моя функция, которая вызывается сверху:

async SignUp(
    fullName: string,
    phone: number,
    email: string,
    password: string,
    attid: number
  ) {
    console.log("Inside Auth SignUp");
    this.afDatabase.list("/attorneyList", ref =>
        ref.orderByChild("attid").equalTo(attid)
      ).valueChanges().subscribe(async data => {
        console.log("Inside Data")
        if (data[0]) {
          return await this.afAuth
            .createUserWithEmailAndPassword(email, password)
            .then(async result => {
              console.log("Signup Result", result)
              result.user["fullName"] = fullName;
              result.user["phone"] = phone;
              result.user["attid"] = attid;
              await this.SetUserData(result.user);
              this.navCtrl.navigateRoot(["/tabs"]);
            })
            .catch(error => {
              console.log("Signup Error", error); //GETTING ERROR HERE
              return error; //THIS IS NOT RETURNING THE ERROR BACK TO THE ABOVE CALLING FUNCTION
            });
        }
      });

  }

Есть идеи, что я здесь не так делаю ??? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 04 мая 2020

return внутри вашего subscribe вызова по запросу пожарного хранилища фактически не возвращает эти данные из функции. вы можете, однако, преобразовать свой запрос в обещание, вызвав .valueChanges().pipe(first()).toPromise() и await результат этого запроса. тогда код, который в данный момент находится внутри вашего subscribe вызова, должен работать как положено.

async SignUp(
    fullName: string,
    phone: number,
    email: string,
    password: string,
    attid: number
  ) {
    console.log("Inside Auth SignUp");
    const data = await this.afDatabase.list("/attorneyList", ref =>
        ref.orderByChild("attid").equalTo(attid)
      ).valueChanges().pipe(first()).toPromise();
        console.log("Inside Data")
        if (data[0]) {
          return await this.afAuth
            .createUserWithEmailAndPassword(email, password)
            .then(async result => {
              console.log("Signup Result", result)
              result.user["fullName"] = fullName;
              result.user["phone"] = phone;
              result.user["attid"] = attid;
              await this.SetUserData(result.user);
              this.navCtrl.navigateRoot(["/tabs"]);
            })
            .catch(error => {
              console.log("Signup Error", error); //GETTING ERROR HERE
              return error; //THIS IS NOT RETURNING THE ERROR BACK TO THE ABOVE CALLING FUNCTION
            });
        }
  }

Этот код должен демонстрировать мое решение

...