【问题标题】:use response result in a component在组件中使用响应结果
【发布时间】:2020-06-19 19:09:53
【问题描述】:

我正在尝试获取组件中发布响应的布尔结果。我检查了 api,它产生了正确的响应(真/假),data 有 appr。值,但我无法在其他组件中使用此值。

我在存储库/服务类中有这个功能:

validateSenderName(name: string) {
this.http.post<boolean>("api/senders/validateSenderName/" + name, null).subscribe(data => { return data; });

}

然后我在一个组件中调用这个函数:

checkSenderName = (params) => new Promise((resolve) => { resolve(this.repo.validateSenderName(params.value)); });

如何解决?

编辑:

感谢迈克尔,我成功了:

checkSenderName = (params) => new Promise((resolve) => {
this.repo.validateSenderName(params.value).subscribe(data => { this.nameAlreadyExists = data; });
resolve(this.nameAlreadyExists);

});

【问题讨论】:

  • 您不能在订阅中返回。您必须返回 http observable 本身。也不确定承诺在那里做什么。

标签: angular http-post


【解决方案1】:

您可以返回 observable 并在组件中订阅它。没有必要在这里混合 observables 和 Promise。

服务

validateSenderName(name: string): Observable<any> {
  return this.http.post<boolean>("api/senders/validateSenderName/" + name, null);
}

组件

getData(params: any) {
  this.service.validateSenderName(params.value).subscribe(
    data => { this.checkSenderName = data },
    error => {
      // always good practice to handle HTTP errors
    }
  );
}

【讨论】:

  • 我需要 promise,因为 devextreme 异步验证器需要 jquery 或本机 promise 对象。但最后,我做到了。
猜你喜欢
  • 1970-01-01
  • 2015-08-07
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多