我必须解决异步调用的问题。方案:
makeReservation
方法返回Observable<SaveResponse>
。当调用者调用makeReservation
方法时应该做
1)调用send3DRequest
并订阅它并等待success
事件。
2)success
事件得到必要的细节,并返回另一个异步方法:return this.reservationHttpService.save(X)
angular2 Observable:如何等异步结果并返回另一个异步方法
在我的实际执行我得到一个错误:Return statement is required for non-void return type
。
private makeReservation(reservationDto: ReservationDTO): Observable<SaveResponse>{
this.reservationHttpService.send3DRequest(reservationDto.threeDQueryDetails)
.subscribe(
successResponse => {
if(successResponse.enrolled === 'Y'){
reservationDto.transRef = successResponse.transactionRef;
reservationDto.acsUrl = successResponse.acsUrl;
reservationDto.paReq = successResponse.paReq;
return this.reservationHttpService.save(reservationDto);
}
else {
reservationDto.transRef = successResponse.transactionRef;
return this.reservationHttpService.save(reservationDto);
}
},
error => { throw new Error(error); });
}
-
然后,我试图让这种变化(问题的代码中描述):
private makeReservation(reservationDto: ReservationDTO): Observable<SaveResponse>{
let saveResponse = new Observable<SaveResponse>(); //added change
this.reservationHttpService.send3DRequest(reservationDto.threeDQueryDetails)
.subscribe(
successResponse => {
if(successResponse.enrolled === 'Y'){
reservationDto.transRef = successResponse.transactionRef;
reservationDto.acsUrl = successResponse.acsUrl;
reservationDto.paReq = successResponse.paReq;
let result = this.reservationHttpService.save(reservationDto);
//HOW TO INSERT the result in saveResponse and notify about change ?
}
else {
reservationDto.transRef = successResponse.transactionRef;
let result = this.reservationHttpService.save(reservationDto);
//HOW TO INSERT the result in saveResponse and notify about change ?
}
},
error => { throw new Error(error); });
return saveResponse; //added change
}
任何想法会欢迎:) 感谢。
大MERCI :)你的暗示解封我的问题所显示的状态。一些技术建议:不要返回'Observable.of(result);'最好只返回已经是'Observable'的'result'。这样我们可以避免创建一个额外的包装。对于'Observable.of({});'from catch(err =>)'块可以输入:'.catch(err => {return Observable.throw(err);})'。 Bonne journee! – meorfi