Javascript 已创建文档,但响应为空

Javascript 已创建文档,但响应为空,javascript,angular,firebase,google-cloud-firestore,Javascript,Angular,Firebase,Google Cloud Firestore,我的代码有两个问题。首先,我总是会遇到这样的错误:“一个同名网站已经存在”,尽管日志告诉我一个网站刚刚创建。这可能是因为我的回答是空的。其次,我不知道如何将documentId从createWebsite返回到onconfirButtonClick(),以便我可以使用它进行进一步处理。我能做些什么来解决这个问题 在组件中: onConfirmButtonClick() { this.websiteService.createWebsite(this.websiteName).then(

我的代码有两个问题。首先,我总是会遇到这样的错误:“一个同名网站已经存在”,尽管日志告诉我一个网站刚刚创建。这可能是因为我的回答是空的。其次,我不知道如何将
documentId
createWebsite
返回到
onconfirButtonClick()
,以便我可以使用它进行进一步处理。我能做些什么来解决这个问题

在组件中:

 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`);
      }
    })
  }
异步创建网站(名称){
返回此.afs.collection('websites',(ref)=>ref.where('name','==',name.).limit(1)).get().subscribe(websites=>{
如果(websites.size==0){
const documentId=this.afs.createId();
const documentPath=`websites/${documentId}`;
const documentRef:AngularFirestoreDocument=this.afs.doc(documentPath);
this.logger.debug(`在:'/${documentPath}'创建了一个网站');
返回documentRef.set({name:name},{merge:true});
}否则{
this.logger.debug(`名为'${name}'的网站已经存在');
}
})
}

在使用中,请执行以下操作:

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`);
      }
   });
  }
onconfirButtonClick(){
this.websiteService.createWebsite(this.websiteName).订阅(网站=>{
如果(websites.size==0){
const documentId=this.afs.createId();
const documentPath=`websites/${documentId}`;
const documentRef:AngularFirestoreDocument=this.afs.doc(documentPath);
this.logger.debug(`在:'/${documentPath}'创建了一个网站');
documentRef.set({name:name},{merge:true});
this.toastrService.success('您的网站已创建');
this.activeModal.close()
}否则{
this.logger.debug(`名为'${name}'的网站已经存在');
}
});
}

然后您将在组件中拥有
文档ID
,我不确定
结果是什么。.整个代码中没有任何迹象表明您正在使用
解析
从服务中的
承诺中返回任何内容。请执行以下操作:

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`);
      }
   });
  }
onconfirButtonClick(){
this.websiteService.createWebsite(this.websiteName).订阅(网站=>{
如果(websites.size==0){
const documentId=this.afs.createId();
const documentPath=`websites/${documentId}`;
const documentRef:AngularFirestoreDocument=this.afs.doc(documentPath);
this.logger.debug(`在:'/${documentPath}'创建了一个网站');
documentRef.set({name:name},{merge:true});
this.toastrService.success('您的网站已创建');
this.activeModal.close()
}否则{
this.logger.debug(`名为'${name}'的网站已经存在');
}
});
}

然后您将在组件中拥有
documentId
,我不确定
结果是什么。.整个代码中没有任何迹象表明您正在使用
resolve
承诺中返回任何内容

我很高兴,这太好了!我很高兴,太好了!