打字稿/角度通过值吗?

桑德拉·威尔福德

因此,在普通的javascript中,如果我想为变量分配一个值,然后在函数外部使用该值,可以先声明该变量,然后在函数中定义它的值来完成。我是打字稿和棱角游戏的新手,所以我不知道该怎么做。

在下面的代码中,我试图从服务中的方法获取值,然后将该值传递给我的返回值。(我希望这是有道理的)。但是,我一直处于未定义状态console.log(url),没有其他错误。

emailsAPI() {
    let url: any  
    this.apiUrlsService.urlsAPI().subscribe(
        data => {
            this.results = data
            url = this.results.emails
        }
    );
    console.log(url)
    return this.http.get('assets/api/email_list.json')
}

api-urls服务:

import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';

@Injectable()
export class ApiUrlsService {

    constructor(
        private http: HttpClient
    ) { }

    urlsAPI () {
        return this.http.get('assets/api/api_urls.json')
    }

}
安吉·卡普尔(Ankit Kapoor)

根据反应式编程,这是您得到的预期行为。由于订阅方法是异步的,因此稍后在接收数据时会得到结果。但是您的控制台日志在同步线程中被调用,因此在您定义subscribe方法时将立即调用它。如果要打印控制台。将其放在您的订阅数据块中。

更新:

根据您的要求,您应该返回Subject而不是Observable,因为Subject是数据使用者和数据生产者。因此它将使用来自电子邮件的httpget请求的数据,并在您调用emailsAPI方法的方法中充当生产者。

emailsAPI(): Subject<any> {
    let emailSubject:Subject = new Subject();  
    this.apiUrlsService.urlsAPI()
        .flatMap(data => {
            this.results = data
            return this.results.emails;
        }).
        subscribe(url=> {
        this.http.get(your_email_url_from_url_received).subscribe(emailSubject);   
   });
    return emailSubject;
}

可以像在calee方法中使用Observable一样订阅该主题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章