因此,在普通的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')
}
}
根据反应式编程,这是您得到的预期行为。由于订阅方法是异步的,因此稍后在接收数据时会得到结果。但是您的控制台日志在同步线程中被调用,因此在您定义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] 删除。
我来说两句