当前位置: 首页 > 知识库问答 >
问题:

角度2:可观察不从服务返回对象(嵌套)

陆英毅
2023-03-14

我有一个返回用户对象的角度服务。用户对象有自己的属性和一组墙。服务向调用组件返回一个可观察的。在该服务中,我能够从http服务返回的json创建用户对象。但是,当我订阅组件中的服务时,返回的对象为null。我做错了什么?

// user.ts

import { wall } from './wall';

export class user {
    Id: number;
    EntryType: number;
    UserType: number;
    SubscriptionType: number;
    IsCoach: boolean;
    Username: string;
    Email: string;
    Name: string;
    Password: string;
    Created: string;
    MemberWalls: wall[];
}
//wall.ts
export class wall {
    Title: string;
    ViewItem_Id: number;
}
//authentication.service.ts

authenticate(authRequest: login): Observable<user> {
        let url: string = this.apiUrl + AppSettings.LOGIN_SERVICE;
        let headers = new Headers({
            'Content-Type': AppSettings.CONTENT_TYPE_HEADER, //'; charset=utf-8',
            'client-secret': AppSettings.CLIENT_SECRET,
            'client-id': AppSettings.CLIENT_ID
        });

        let options = new RequestOptions({ headers: headers });

        return this._http.post(url, authRequest, options) // 
            .map(data => {
                this.authenticated(data);
            })
            .catch(this.handleError);

    }

    private authenticated(res: Response) {
        let body = res.json();
        if (body.StatusCode === 200) {
            localStorage.setItem('auth_token', res.headers.get("access-token"));
            let user1: user = body.Data;
            //The user object is fine here. 
            //That means that the json and the user class structure match perfectly
            console.log(user1);
            return body.Data || {};
        }
        else {
            return {};
        }
    }
//login.component.ts

login() {
        this.errorMessage = '';
        this.currentUser = null;

            this._authService.authenticate(this.loginModel)
                .subscribe(user1 => this.currentUser = user1,
                error => this.handleError( error));

  //The user1 returned by the service is always null.
    }

共有2个答案

利博远
2023-03-14

接受冈特的回答:

user1=

宋伟泽
2023-03-14

映射post请求的结果时缺少return语句。

在es6和ts中:

  • 当使用括号定义箭头函数时,返回语句是强制性的。
  • 当定义一个没有括号的箭头函数时,es6自动生成一个返回语句,返回箭头符号后提供的表达式的值

前任:

let f = (data) => this.authenticated(data);;
// Or 
let f = (data) => { return this.authenticated(data); };
 类似资料:
  • 我有一个组件订阅服务中的一个可观察对象。该方法反过来订阅另一个服务中的可观察对象。我想将一个数组从最后一个服务传递回第一个服务,然后第一个服务将该数组传递回组件。更具体地说,该组件调用其本地服务,然后调用一个数据服务,该数据服务通过http客户端访问我的数据库。http客户端正在工作,数据服务将数组返回给本地服务。本地服务接收数组,但我不知道如何将该数组作为可观察对象传递回组件。以下是简短的代码块

  • 我对可观察量很陌生。如何仅从一个简单的字符串创建可观察的?然后订阅它并在它发生变化时输出它。 这有意义吗? 我在谷歌搜索上一点运气都没有。可能是错误的关键字? 添加一些代码以更好地解释: 我想我在这里做错了什么?但不知道怎么问。我将不胜感激的任何解释。

  • 我试图显示一个对象数组,多个函数将不得不改变它。所以我试着让它成为可观察的(也许我错了)。 打字版本:2.7.2 rxjs:6.2.1角cli:6.0.8节点:8.11.3角:6.0.7 我的服务(IsolementService)中有一个变量声明为: 我的服务主要有两种方法 接口: 我的服务是呼叫组件: 但是当我编译时,我有一个错误TS2495:类型“Observable”不是数组或字符串类型。

  • 我面临的问题是我需要一个身份验证令牌来创建我的Retrofit服务。我目前使用可观察来获取所述令牌,导致一个相当丑陋的可观察构造: 我忍不住觉得这不是应该做的。我说得对吗?

  • 我正在尝试使用http.get从服务器检索json文件,并从组件订阅可观察的内容。但是,它返回的是一个错误,而不是数据。 你能告诉我哪里出了问题吗: 下面是组件: 我正在使用Angular和rxjs库的最新版本。 请帮忙。

  • 我正在努力理解如何合并两个可观察对象并利用它们合并后的产品。我在mergeMap、switchMap、flatMap、大理石图等上看了无数视频,但我仍然不知道合并观测值是如何工作的。我觉得在使用RxJS的时候,我不会有效率,甚至不会正确。 我有一个要订阅的可观测值,我还想订阅代码中特定表单数组的valueChanges可观测值。但是,我需要确保只有在正确构建表单数组之后才能进行第二次订阅,否则将出