为什么订阅方法 returns 订阅者而不是响应中的值

why subscribe method returns Subscriber instead of value in response

在我的应用程序中,用户配置是基于节点服务器中可用的配置 ID 检索的。

  exports.getConfig() =(req,res) => {
 return res.status(200).send(id) -> where id is been read from configuration file 
}

在服务中,我接到了配置文件中读取 属性 的调用。

      getUserConfig():any {
        this.http.get('/config/user' , {responseType:'text'}).subscribe(data => {
       //console.log(data) ----- prints undefined 
        data
        )
        }

在 ts 中,我将用户配置存储在一个变量中,如下所示

let userConfigValue = this.configService.getUserConfig();
//console.log(userConfigValue) --- prints subscriber object

我预计 userConfigValue 为“1200”,即文件中的值。我在这里做错了什么。如何获取我的 angular 组件中的值。

这不是 RxJS Observable 模式的工作方式。任何直接依赖于可观察对象发出的异步数据的语句(例如您对 userConfigValue 的分配)都必须在订阅内。

在您的情况下,您需要 return 调用中的可观察对象并在需要响应的地方进行订阅。

import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';

getUserConfig(): Observable<any> {    // <-- return `Observable`
  this.http.get('/config/user' , { responseType:'text' }).pipe(
    tap((value: any) => console.log(value))   // <-- use `tap` for side effects (like logging)
  );
}
userConfigValue: any;

this.configService.getUserConfig().subscribe({
  next: (value: any) => {
    this.userConfigValue = value;
    // other statements that depend on `this.userConfigValue`
  },
  error: (error: any) => {
    // error handling
  }
});

下一期:undefined 来自后端

这可能与前端无关。确保 id 变量在 return 从服务器

获取它之前定义
exports.getConfig = (req, res) => {  // <-- parenthesis to `getConfig` isn't required
  console.log(id);  // <-- make sure here it isn't `undefined`
  return res.status(200).send(id);
}