gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:19:12 25 4
gpt4 key购买 nike

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

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

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 || {};
}
}

我想知道为什么会这样,如果这不是更改获取数据的方法,我该如何在服务中执行此操作(不是在订阅者组件中,因为我想根据另一个无关的变量更改数据与订户组件)

最佳答案

这是 JS 的“特性”;-)

你需要使用.bind(this)

    return this.http.get(this.API_URL)
.map(this.extractData.bind(this))
.catch(this.handleError.bind(this));

或箭头函数

    return this.http.get(this.API_URL)
.map(val => this.extractData(val))
.catch(err => this.handleError(err));

保留this的范围

关于angular - map 运算符调用的方法中的可观察范围变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com