2017-08-31 53 views
-1

我想形成http调用的结果作为方法的结果。例如:如何将http调用的结果作为方法的结果?

代码错误

getPersonId(idBook: number): number { 
    return this.mpShipmentWebAPI 
     .GetLast({ bookID: idBook }) 
     .subscribe((books) => { 
      return Number(books.Data[0].ID); 
     });    
} 

我知道如何解决上面的代码:

getPersonId(idBook: number): number { 
    return this.mpShipmentWebAPI 
     .GetLast({ bookID: idBook }) 
     .subscribe((books) => { 
      this.handleData(books), 
     });    
} 

我想是检查这个结果以下列方式:

let idPerson = this.getPersonId(idBook); 
if (idPerson > 0) { 
    //the rest code here 
} 

是否可以做到?

+0

你不能这样做,因为'subscribe'是返回一个'Observable'和HTTP调用是'asynchronous'。 – Milad

回答

1

这是不可能的,因为http调用是异步的。不建议尝试使它们同步,因为这会冻结其他所有内容。正确的方法将是这样的:

getPersonId(idBook: number): Observable<number> { 
    return this.mpShipmentWebAPI 
     .GetLast({ bookID: idBook }) 
     .map(books => this.handleData(books));    
} 

...

this.getPersonId(idBook) 
    .filter(idPerson => idPerson > 0) 
    .do(idPerson => { 
     // rest of your code 
    }); 
相关问题