2017-08-13 73 views
1

之前等待的东西我有这样的方法的http服务:角4,HTTP调用

get(url): Promise<Object> { 
    //await something here before next line 
     return this.httpClient.get(url) 
      .map((res) => { 
        return res as Object 
       }) 
       .toPromise(); 

我需要调用最终执行某些对象更新的方法。如何让上述方法等到另一个完成?

+1

调用这个来自'。那么()',你需要等待功能上? – Claies

+1

另一种方法是异步的吗?这需要这个电话的回应吗? – Skeptor

+0

@Skeptor,它不需要获得此调用的结果,但需要等到该调用完成。这是从后台获取来自Azure AD的新令牌的aquireToken方法,并更新了一堆存储 我不认为它应该是异步的,但如果它是,它可能会导致UI阻止 – LastTribunal

回答

2

这可以通过很多方式完成。其中之一是forkJoin(这类似于promise.all

// parallel method you want to execute , let this return an observable 
doSomething(){ 
    return this.http.get('token'....); 
} 

get(url): Promise<Object> { 
    return Observable.forkJoin([doSomething(),this.httpClient.get(url)]) 
     .map((res) => { //res is an array with both outputs 
      // we are only concerned with second response 
      return res[1] as Object; 
     }) 
     .toPromise(); 
+0

这将等待doSomething()完成? – LastTribunal

+1

是的,它并行运行并且只有在两者都完成后才执行映射 – Skeptor

0

这是我如何解决它:

get(url): Promise<Object> { 
      return this.sendRequest(url, 'get', '') 
        .map((res) => { 
         return res as Object 
         }) 
        .toPromise(); 
     } 

    sendRequest(url, type, body): Observable<any> { 
      return this.adalService.acquireToken() 
       .flatMap((token: string) => { 
//I am not using the result of the flatmap, only exploiting it to ensure resolution, httpClient is being intercepted with the updated values 
        return this.httpClient[type](url, body) 
      }); 
    }