Документ создан, но ответ пуст - PullRequest
0 голосов
/ 10 февраля 2020

У меня две проблемы с моим кодом. Во-первых, я всегда получаю сообщение об ошибке: «Сайт с таким именем уже существует», даже несмотря на то, что в журналах сообщается, что он только что создан. Это, вероятно, потому что мой ответ нулевой. Во-вторых, я не знаю, как вернуть documentId из createWebsite обратно в onConfirmButtonClick(), чтобы я мог использовать его для дальнейшей обработки. Любые идеи, что я могу сделать, чтобы решить эту проблему?

В компоненте:

 onConfirmButtonClick() {
    this.websiteService.createWebsite(this.websiteName).then(result => {
      if(result) {
        this.toastrService.success('Your website has been created.');
        this.activeModal.close();
      } else {
        this.toastrService.error('A website with this name already exists.');
      }
    });
  }

В обслуживании:

  async 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();
        const documentPath = `websites/${ documentId }`;
        const documentRef: AngularFirestoreDocument<any> = this.afs.doc(documentPath);
        this.logger.debug(`Created a website at: '/${ documentPath }'`);
        return documentRef.set({name: name}, { merge: true });
      } else {
        this.logger.debug(`A website with the name '${name}' already exists`);
      }
    })
  }

1 Ответ

2 голосов
/ 10 февраля 2020

В сервисе сделайте следующее:

createWebsite(name) {
    return this.afs.collection('websites', (ref) => ref.where('name', '==', name).limit(1)).get();
  }

Это вернет наблюдаемое, затем в компоненте подпишитесь на это наблюдаемое .:

onConfirmButtonClick() {
    this.websiteService.createWebsite(this.websiteName).subscribe(websites => {
      if(websites.size == 0) {
        const documentId = this.afs.createId();
        const documentPath = `websites/${ documentId }`;
        const documentRef: AngularFirestoreDocument<any> = this.afs.doc(documentPath);
        this.logger.debug(`Created a website at: '/${ documentPath }'`);
        documentRef.set({name: name}, { merge: true });
        this.toastrService.success('Your website has been created.');
        this.activeModal.close()
      } else {
        this.logger.debug(`A website with the name '${name}' already exists`);
      }
   });
  }

Тогда у вас будет documentId внутри компонента, я не уверен, что такое result. Во всем коде нет указания, что вы используете resolve для возврата чего-либо из Promise

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