Javascript 将承诺从服务返回到组件

Javascript 将承诺从服务返回到组件,javascript,typescript,firebase,google-cloud-firestore,Javascript,Typescript,Firebase,Google Cloud Firestore,如何将documentId作为结果从websiteService.createWebsite返回到onconfirButtonClick: onConfirmButtonClick() { this.websiteService.createWebsite(this.websiteName).then(result => { if(result) { console.log(result); this.toastrService.su

如何将documentId作为结果从
websiteService.createWebsite
返回到
onconfirButtonClick

  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;
        }
      });
  }

您只是在
createWebsite
函数中缺少了一些
return
语句

大概是这样的:

  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()
块就可以将其提取出来。

您所做的是错误的。你不想每次点击都订阅。只需执行一次(例如初始化时),然后将documentId设置为模型或状态。我不确定是否遵循,请给我一个示例谢谢。我只是好奇为什么这被否决了。关于上面这一点——“你所做的是错误的。你不想每次点击都订阅。只做一次(例如初始化时)并将documentId设置为模型或状态。”,我需要考虑它吗?同样关于
this.afs.doc(
websites/${documentId}
).set({name:name}),文档的实际创建,我从set收到消息
承诺被忽略
,这是我应该担心的吗?