Angular 2 Http 提供者的可观察订阅未触发

标签 angular rxjs angular2-observables

我很难让 .subscribe() 方法在 Angular 2 中的可观察对象上触发。我的设置是一个提供程序,它使用一个注入(inject) Http Service返回 Controller 可以与之交互并订阅的可观察对象的方法。

我不清楚为什么当方法返回可观察值并且 Controller 将订阅链接到该可观察值时订阅不会触发。非常感谢任何帮助。

用户提供商

@Injectable()
export class UserResource {

    constructor( protected http: Http ) {}

    public getUsers(): Observable<User[]> {
        return this.http.get( '/api/users' )
            .map( (response: Response) => <User[]>response.json() )
            .catch( (error: Response | any) => {
                console.log( error );
                return Observable.throw( error );
            });
    }
}

用户 Controller

export class UsersController {
    public usersEnrolled: User[]   = [];
    public usersUnenrolled: User[] = [];

    constructor( private userResource: UserResource ) {}

    ngOnInit() {
        this.userResource.getUsers()
            .subscribe(( users: User[] ) => {
                console.log( 'users', users ); // does not fire
                this.usersUnenrolled = users.filter( (user: User) => !user.isEnrolled );
                this.usersEnrolled   = users.filter( (user: User) => user.isEnrolled );
            },
            ( error ) => console.log( 'error', error ),
            () => console.log( 'completed' )
        );
    }
}

更新了订阅以包含错误和完成的回调

请注意,为了代码简洁,我排除了导入语句。

最佳答案

您应该向您的订阅添加一个错误函数,以便了解原因。

.subscribe(
     users: User[] => console.log( 'users', users ),
     error => console.log('error',error),
     () => console.log('completed')
);

您仅传递“下一个”函数。我发现使用 subscribe() 的所有三个函数很有帮助

关于Angular 2 Http 提供者的可观察订阅未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42581960/

相关文章:

javascript - 从对象数组中获取单个属性数组

javascript - 将 RxJS v4 代码转换为 v5,处理带有 "pull"的队列

Angular 2 : Nested subscribe with second subscribe inside the loop

rxjs 合并和错误处理

angular2 guard 不处理页面刷新

Angular4 Observable 订阅 ServiceStack 服务器事件

angular - Angular 更新后的 Bootstrap SCSS 错误

Angular - 同一组件中的 ExpressionChangedAfterItHasBeenCheckedError

angular - 使用 Angular 以编程方式设置 Bootstrap 表单中的选择字段值

javascript - Observable - 将 2 个 Promise 转换为一个 Observable