为啥响应在服务中可用但在组件中未定义? [复制]

Posted

技术标签:

【中文标题】为啥响应在服务中可用但在组件中未定义? [复制]【英文标题】:Why is the response available in a service but in the component is undefined? [duplicate]为什么响应在服务中可用但在组件中未定义? [复制] 【发布时间】:2018-04-07 13:17:11 【问题描述】:

我有一个服务和一个使用该服务的组件。问题是在服务中我可以读取作为 JSON 对象的响应。但在组件中,我得到以下信息:res: undefined

服务:

constructor(
    private http: Http,
    private fbuilder: FormBuilder,
    private user: UserService
) 
login(uname:string, pass:string): Observable<any> 

    let headers = new Headers(
        'Content-Type': 'application/json',
        'Username':uname,
        'Password':pass
    );
    let options = new RequestOptions( headers: headers );
    let data = ;
    var Observable = this.http.post( url, data, options )
    .map(res => 
        res.json();
    )
    .catch( (error: any) => Observable.throw(error.json().error || 'Server error') );
    return Observable;

组件:

constructor(
    private http: Http,
    private fbuilder: FormBuilder,
    private user: UserService
) 
loginUser(uname: string, pass: string) 
    this.user.login(uname, pass).subscribe(
        res => 
            console.log('res: ' + JSON.stringify(res));
        ,
        err => 
            this.errorMessage = err;
        
    );

【问题讨论】:

【参考方案1】:

您的问题似乎与此代码有关:

.map(res => 
    res.json();
)

您没有返回res.json 的结果。您只需要添加return 语句,如下所示:

.map(res => 
    return res.json();
)

您也可以删除 对,如下所示:

.map(res => res.json())

【讨论】:

哦。我的错。你说得对!之前有同样的问题,发现我必须返回res.json()。问题解决了。是的,删除 会节省一些代码,但我想打印出 res。在console.

以上是关于为啥响应在服务中可用但在组件中未定义? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 this.$refs 在 Vue 子组件中未定义?

为啥在使用 Promise 时在类方法中未定义“this”? [复制]

为啥在第一次组件渲染中未定义 useState 对象值?

Sencha Touch - 为啥在我的自定义组件中未定义此功能?

Nuxt vuex状态菜单列表:组件中未定义

为啥子组件中未定义上下文?