我遇到了从第二个请求返回Observable的问题。 像这样:
commandRequest(action:string, commandData:any):Observable<CashDesckResponse>
{
let command:CashDeskRequest;
//ask my backend for command
this.requestCommandString(action, commandData, "POST")
//this is my response from backend
.map(r=>r.response).subscribe(my_1_response=>{
//then i need to send this response data to other server/action
//to execute it and return this second response as the result of
//this method.
command = new CashDesckRequest(my_1_response);
return this.server.executeCommand(command).map(return_this=>return_this);
});
};
private requestCommandString(action:string, requestData:any,
type:string):Observable<AjaxResponse>{
return Observable.ajax({
body:JSON.stringify(requestData),
method:type,
url:this._apiServerUrl+action
}).map(r=>r);
};
我的问题是commandRequest从第一个.map()返回值。如果我将尝试从内部订阅compiller throw错误返回值: [ts]声明类型既不是'void'也不是'any'的函数必须返回一个值。 https://habrastorage.org/web/93b/e6b/17b/93be6b17bf5b46b5847e67deefd6eea1.png
答案 0 :(得分:0)
要从一个流映射到另一个流,您可以使用mergeMap或switchMap
commandRequest(action:string, commandData:any):Observable<CashDesckResponse>
{
return this.requestCommandString(action, commandData, "POST")
.map(r1 => new CashDesckRequest(r1.response)
// map first response to command instance
.mergeMap(command =>this.server.executeCommand(command));
// map the command observable to a new observable
}