Javascript 将承诺从服务返回到组件
如何将documentId作为结果从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
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收到消息承诺被忽略
,这是我应该担心的吗?