[英]Modifying object at service layer in angular2: Subscription is not assignable to the type observable
我是Angular2框架的新手,因此如果这是一个基本问题,请原谅。
我正在通过HTTP包装返回的服务层处理对象。 该对象应该传递给组件,但是首先应该对数据进行操作,并且仅提取和转发必要的数据。
当我尝试执行此操作时,我收到错误消息“无法将订阅分配给可观察的类型”。 这是代码
return this.httpGet<UserInfo[]>(url, {headers}).switchMap(data => data)
.subscribe(
data => {
console.log("new values are going to be" + JSON.stringify( data[0].address.addressLine1));
this.userInfo[0].name = "test name";
this.UserInfo[0].address.city = data[0].address.city;
this.UserInfo[0].address.state = data[0].address.state;
},
);
现在,我认为有意义的是,首先在订阅中将其转换回流时将其转换为数据,然后显式返回该对象,但这也无法提供所需的输出,即使类型是可观察的也是如此。 来自Java oop背景,在这里我看不到问题是什么,这是一个非常困惑的问题。 任何见解均表示赞赏。
编辑:为了完成,在这里进行服务呼叫-
this.inputFormControl.valueChanges
.debounceTime(4000)
.switchMap(query => this.userService.search(query))
.subscribe(
data => {
this.data = data;
},
);
在您当前的代码中,您已经订阅了观察者。 这样就返回了Subscription而不是Observable。 然后在您的调用函数中,尝试将其分配给可观察对象。 尝试以下模式
someFunction() {
return this.httpGet<UserInfo[]>(url, {headers}).switchMap(data => data)
}
callingFuction(){
someFunction().subscribe(
data => {
console.log("new values are going to be" + JSON.stringify( data[0].address.addressLine1));
this.userInfo[0].name = "test name";
this.UserInfo[0].address.city = data[0].address.city;
this.UserInfo[0].address.state = data[0].address.state;
},
);
}
如其他答案中所述,您将返回订阅而不是Observable。 我也看不出为什么在服务中需要使用switchMap
(我假设您在服务中有http请求),因为您正在组件中使用它。 因此,我将在服务中进行map
在那里修改数据并将其返回给您的组件。
再指出一件事,在当前代码中,您不会从http请求中返回任何内容,因此您需要添加一个return语句。
return this.httpGet<UserInfo[]>(url, {headers})
.map(data => {
this.UserInfo[0].name = "test name";
this.UserInfo[0].address.city = data[0].address.city;
this.UserInfo[0].address.state = data[0].address.state;
return this.UserInfo; // add return!
});
您的组件代码将保持原样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.