【问题标题】:Return promise from service to component从服务返回承诺到组件
【发布时间】:2020-02-09 17:43:51
【问题描述】:

如何将 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;
        }
      });
  }

【问题讨论】:

  • 你做错了。您不想在每次点击时都订阅。只需执行一次(例如在初始化时)并将 documentId 设置为模型或状态。
  • 不确定我是否遵循,你能给我举个例子吗

标签: javascript typescript firebase google-cloud-firestore


【解决方案1】:

您只是在 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 设置为模型或状态。”,我需要考虑到这一点?
  • 还有关于this.afs.doc(websites/${ documentId }).set({ name: name });,文档的实际创建,我收到消息promise from set is ignored,这是我应该担心的吗?跨度>
猜你喜欢
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 2018-03-15
相关资源
最近更新 更多