javascript - 修改 Angular2 服务层的对象 : Subscription is not assignable to the type observable

标签 javascript angular 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;
    },
);

最佳答案

正如其他答案中提到的,您返回的是订阅而不是 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!
  });

您的组件代码将保持原样。

关于javascript - 修改 Angular2 服务层的对象 : Subscription is not assignable to the type observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47496335/

相关文章:

javascript - knockout 变量未定义

javascript - 使用 knockout.js 将 css 类绑定(bind)到 Observable Array item.chosen 值

c# - 用于嵌套层次结构的响应式(Reactive)扩展展开/扫描方法

升级到 RC5 后,Angular2 通用错误找不到模块 '@angular/compiler/src/template_parser'

javascript - Rails 3 使用 Jquery 远程提交单选按钮表单(不使用 $.post)?

javascript - 需要连接单个数组内的多个数组并将每个数组的第一个值设置为键

javascript - 如何使用 JqueryUI sortable 更改放置元素的样式?

javascript - "this"的绑定(bind)

angular - TypeScript getter setter 约定

Angular2 没有服务提供者 - 外部模块