angular - 如何在 Angular 2 中将可观察到的值设置为变量

标签 angular typescript angular2-observables

我有一个 UsernameService,它返回一个包含 json 对象的可观察对象。在 AnotherService 中,我想从 UsernameService 对象中注入(inject)一个值。

到目前为止,我可以从 UsernameService 订阅可观察对象,并且可以在控制台中显示它。我什至可以向下钻取并在控制台中显示对象的值之一。但是,我不明白如何将该值分配给我可以使用的变量。相反,当我尝试将值分配给变量时,在控制台中我得到: Subscriber {closed: false, _parent: null, _parents: null...etc

这是我在控制台中成功显示可观察值的示例:

import { UsernameService } from './username.service';
import { Injectable, OnInit } from '@angular/core';
import 'rxjs/Rx';

@Injectable()
export class AnotherService {

    username: any[] = [];

    constructor(private getUsernameService: UsernameService) { }

    someMethod() {
        let myFinalValue = this.getUsernameService.getUsername()
        .subscribe(username => console.log(username.data[0].AccountName));
    }
}

上面的代码导致控制台正确显示了我试图分配给变量 myFinalValueAccountName 字段的值。但是,我似乎无法弄清楚我哪里出错了。

当我尝试使用相同的技术来简单地获取值(而不是登录控制台)时,我得到了通用的:Subscriber {closed: false, _parent: null, _parents: null。 ..等等,正如我之前提到的。

这是导致我的错误的代码示例:

import { UsernameService } from './username.service';
import { Injectable, OnInit } from '@angular/core';
import 'rxjs/Rx';

@Injectable()
export class AnotherService {

    username: any[] = [];

    constructor(private getUsernameService: UsernameService) { }

    someMethod() {
        let myFinalValue = this.getUsernameService.getUsername()
        .subscribe(username => this.username = username.data[0].AccountName);
        console.log(myFinalValue);
    }
}

最终,我的目标是将 username.data[0].AccountName 中的值分配给变量 myFinalValue

预先感谢您的帮助!

最佳答案

因为你的调用是异步的(回调只有在完成时才会起作用,你不知道什么时候),你不能从异步调用中返回值,所以你只需要在调用时分配它完成的。 您需要执行与您在 subscribe 方法中获得的 username 相关的逻辑。您需要创建一个字段来保留 username 的值,以供以后在类中使用。

@Injectable()
export class AnotherService {

    username: any[] = [];
    myFinalValue: string;

    constructor(private getUsernameService: UsernameService) { }

    someMethod() {
        this.getUsernameService.getUsername()
        .subscribe(username => this.myFinalValue = username.data[0].AccountName));
    }
}

关于angular - 如何在 Angular 2 中将可观察到的值设置为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46804020/

相关文章:

Angular 循环遍历数组并使用 forkJoin 收集 Observables

angular - ion-fab-list on open, on close 事件

angular - onPush 检测策略在 Angular 8 中不起作用

javascript - 循环遍历html元素中的子元素

angular - 服务可观察在组件 NgOnInIt 中不起作用 - Angular2

angular - RxJS - 如果输入可观察对象为空数组,则 switchMap 不会发出值

node.js - 无法从串联的 Observable 中提取/解开值

angular - 如何选择组件模板中的元素?

typescript - 在 Angular cli 中导入 ng2-uploader

typescript - 使用 typescript 向 AWS Elasticsearch Service 发出签名请求