我们要做的是从URL调用一个端点,该URL返回2个变量,这些变量可以在站点的多个部分中使用。尽管我们正在使用http调用并订阅它,但是为了加快站点速度,我们只想进行一次api调用。为此,我们在服务上创建了一个Observable。服务会在构造函数中调用一个函数,该函数设置Observable的值,但是有时在直接访问链接时会返回无法预订的undefined方法。下面是使用Microsoft ADAL库的示例代码:
首先,我们在服务中将变量设置为Observable:
@Injectable()
export class MicrosoftGraphService {
public details: Observable<any>;
Run Code Online (Sandbox Code Playgroud)
然后我们在构造函数中设置可观察值:
constructor(
private _http:Http,
private _adalService: AdalService,
private _sanitizer:DomSanitizer
) {
this.getToken().subscribe(token => {
/**
* Get me data from graph to determine school_id and mis_id
*/
this.get('me', token, true).subscribe(me => {
this.details = new Observable(observer => {
observer.next({
me: me
});
observer.complete();
});
});
});
Run Code Online (Sandbox Code Playgroud)
getToken函数为:
getToken(): Observable<any> {
return this._adalService
.acquireToken( this._adalService.config.endpoints.graph );
}
Run Code Online (Sandbox Code Playgroud)
get函数是:
get( endpoint, token, beta = false ): Observable<any> {
return this._http.get( this._adalService.config.endpoints.graph …Run Code Online (Sandbox Code Playgroud)