Функция возвращает [объект Object] - PullRequest
0 голосов
/ 14 января 2020

Я смотрел на некоторые другие ответы SO, но не могу понять, как это исправить. Когда я console.log this.checkIfEmailExists(form) я получаю [object Object] вместо логического значения, я ожидаю

import { Component, OnInit } from '@angular/core';
import { NgForm } from '@angular/forms';

import { User } from '../shared/user.model';
import { UserService } from '../shared/user.service';

@Component({
  selector: 'app-user',
  templateUrl: './user.component.html',
  styleUrls: [
    './user.component.css'
  ]
  // providers: [UserService]
})
export class UserComponent implements OnInit {
  god = 'me, I am god';

  constructor(private userService: UserService) {}

  ngOnInit() {
    console.log('User Component Appears!');
  }

  async onSubmit(form: NgForm) {
    // Logs as '[object Object] please be a boooooolean'
    console.log(this.checkIfEmailExists(form) + ' please be a boooooolean');
  }

  checkIfEmailExists(form) {
    const emailToCheck = form.value.email;
    return this.userService.sendEmailToCheck(emailToCheck).subscribe(res => {
      // Logs as 'false <- keeping this here to...'
      console.log(
        res +
          ' <- keeping this here to make sure I dont break it, but delete at some point'
      );
      return res;
    });
  }
}

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Похоже, UserService.subscribe() является асинхронным. Я предполагаю, что это вызывает обещание. Чтобы записать результат этого обещания, вам нужно разрешить его. Один из вариантов такой:

this.checkIfEmailExists(form).then(res => console.log(res));

В качестве альтернативы вы можете использовать async и await. Во-первых, вам нужно объявить checkIfEmailExists() как async:

async checkIfEmailExists(form) {
   // ...
}

Затем вы можете await, когда позвоните:

var res = await this.checkIfEmailExists(form);
console.log(res);

Я предлагаю вам узнать об обещаниях в JavaScript и около async и await ключевых слов.

0 голосов
/ 14 января 2020

checkIfEmailExists возвращает подписку checkIfEmailExists.

В console.log это будет типизированный тип, поэтому вы видите [object object].

Конвертировать checkIfEmailExists для асинхронной c функции (возможно, выполняющей что-то вроде .toPromise() в методе sendEmail()).

...