Angular:订阅后仍然没有获得值

标签 angular typescript observable subscribe

在我的 ts 文件中,我有这个函数:

searchForUser() {
        this.userService.getUserByLastName(this.searchString)
            .subscribe(
                (data: User) => this.searchedUser = data
            );
        console.log('Firstname: ' + this.searchedUser.firstName);
        this.dataService.changeUser(this.searchedUser);
    }

在我的 html 文件中,我从 searchedUser 获得了正确的值。在我的 console.log 和 dataService 中没有。为什么? 当我进行第二次搜索时,我将从之前的搜索中获取值。

最佳答案

这是一个时序问题,请将所有需要响应的操作移至订阅回调中,以便访问您需要的值。

public searchForUser(): void
{
    this.userService.getUserByLastName(this.searchString).subscribe((data: User) => 
    {
        this.searchedUser = data;
        console.log('Firstname: ' + this.searchedUser.firstName);
        this.dataService.changeUser(this.searchedUser);
    });         
}

发生此错误的原因是您在订阅中定义 this.searchedUser 之前尝试访问它。

关于Angular:订阅后仍然没有获得值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55810707/

相关文章:

javascript - TypeScript 中是否有可用于 HTML 元素的类?

angular - Angular 6 中主布局 socket 中的嵌套 socket

JavaFX:将 TextArea 绑定(bind)到选定 TreeItem 的元素(包含在 TreeView 中)

angular - 从 Angular HttpInterceptor 调用 Promise

arrays - 如何观察 Ember.Array 中的嵌套属性

split - 从主应用程序文件中分离 Angular 2 路由配置

javascript - 将 ngFor 列表中的按钮更改为文本字段以获取值,然后提交进行处理

javascript - Http Get- 从 Web api 获取对象

javascript - 如何将预先存在的标签添加到 Angular2 中的 Select2

node.js - 如何从 typeorm 实体中排除列,并且可以选择使用 Find 方法获取该列