首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >map运算符调用的方法中的可观察范围变化

map运算符调用的方法中的可观察范围变化
EN

Stack Overflow用户
提问于 2016-08-22 13:23:15
回答 1查看 1.7K关注 0票数 8

我试图在通过map操作符调用的方法返回数据之前更改数据,但我发现该方法之外的所有其他变量都是undefined

我在这里写了一段简单的代码来表示我的意思,记录的测试变量作为undefined返回

代码语言:javascript
运行
复制
import {Observable} from "rxjs/Observable";
import {Injectable} from "@angular/core";
import {Http, Response} from "@angular/http";

@Injectable()
export class DataService {
    private API_URL= 'url...';
    private test = 1;

    constructor(private http: Http) {}

    getData(): Observable<any> {
        return this.http.get(this.API_URL)
            .map(this.extractData)
            .catch(this.handleError);
    }

    private extractData(res: Response) {
        let body = res.json();
        console.log(test);
        return body.data || {};
    }
}

我想知道为什么会发生这种情况,如果这不是更改获取的数据的方法,我如何在服务中进行更改(不是在订阅者组件中,因为我想基于与订阅者组件无关的另一个变量来更改数据)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-22 13:28:09

这是JS的“特性”;-)

您需要使用.bind(this)

代码语言:javascript
运行
复制
    return this.http.get(this.API_URL)
        .map(this.extractData.bind(this))
        .catch(this.handleError.bind(this));

或箭头函数

代码语言:javascript
运行
复制
    return this.http.get(this.API_URL)
        .map(val => this.extractData(val))
        .catch(err => this.handleError(err));

保留this的作用域

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39071864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档