Вернуть обещание от сервиса к компоненту - PullRequest
0 голосов
/ 09 февраля 2020

Как вернуть documentId в результате от websiteService.createWebsite до onConfirmButtonClick:

  onConfirmButtonClick() {
    this.websiteService.createWebsite(this.websiteName).then(result => {
      if(result) {
        console.log(result);
        this.toastrService.success('Your website has been created.');
      }
    });
  }

В службе моего сайта:

  createWebsite(name) {
    this.afs.collection('websites', (ref) => ref.where('name', '==', name)
      .limit(1))
      .get()
      .subscribe(websites => {
        if (websites.size == 0) {
          const documentId = this.afs.createId();
          this.afs.doc(`websites/${ documentId }`).set({ name: name });
          return documentId;
        }
      });
  }

1 Ответ

0 голосов
/ 09 февраля 2020

Вам просто не хватает нескольких return операторов в вашей функции createWebsite.

Примерно так:

  createWebsite(name) {
    return this.afs.collection('websites', (ref) => ref.where('name', '==', name)
      .limit(1))
      .get()
      .subscribe(websites => {
        if (websites.size == 0) {
          const documentId = this.afs.createId();
          return documentId;
        }
      });
  }

С этими двумя добавленными return операторами, documentId всплывет и будет возвращен из createWebsite, где блок then() вызывающего кода может затем забрать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...