为什么订阅方法 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);
}
在我的应用程序中,用户配置是基于节点服务器中可用的配置 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);
}