Angular 当没有要传递的流时,在flatMaps之后,rxjs中应该调用什么方法而不是订阅?
我有一个方法,将其作为表单管理的一部分,并执行以下操作。我可以很容易地用承诺解决这样的问题,但现在是学习可观察性的时候了!因此,该方法的任务是:Angular 当没有要传递的流时,在flatMaps之后,rxjs中应该调用什么方法而不是订阅?,angular,rxjs,observable,Angular,Rxjs,Observable,我有一个方法,将其作为表单管理的一部分,并执行以下操作。我可以很容易地用承诺解决这样的问题,但现在是学习可观察性的时候了!因此,该方法的任务是: 调用clientWebApiService.getClients()以获取客户端列表,并返回environmentWebApiService.getEnvironmentsNotInPipeline()的可观察值 在第二个flatMap中,结果将传递给局部变量 在subscribe中,我想映射另一个数据结构,以便能够设置表单的内容 subscrib
- 调用
以获取客户端列表,并返回clientWebApiService.getClients()
environmentWebApiService.getEnvironmentsNotInPipeline()的可观察值
- 在第二个flatMap中,结果将传递给局部变量
- 在
中,我想映射另一个数据结构,以便能够设置表单的内容subscribe
subscribe()
抛出以下错误:
ERROR TypeError: You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at Object.subscribeToResult (subscribeToResult.js:73)
at MergeMapSubscriber._innerSub (mergeMap.js:130)
at MergeMapSubscriber._tryNext (mergeMap.js:127)
我已经(希望)发现subscribe需要一个这里没有提供的流。如果我看到的是正确的,那么第二个平面图应该返回一个由subscribe()
处理的可观察对象。在这个结构中没有。在这种情况下,应该调用什么方法?我发现rxjs有很多方法。我不知道我在找哪一个
我试图重新构造代码,但如果没有subscribe()
,则无法执行
- 这样的最佳实践案例是什么
public editHandler({dataItem}):void{
让客户:IClientContract[];
let环境:IEnEnvironmentContract[];
this.clientWebApiService.getClients()
.flatMap((客户端结果:任意):可观察=>{
clients=clientsResult作为IClientContract[];
console.log('1',客户端);
返回此.environmentWebApiService.getEnvironmentsNotInPipeline();
})
.flatMap((环境结果:IEnvironmentContract[]):any=>{
环境=环境结果;
console.log('2',环境);
})
.订阅(()=>{
console.log('3');
让editableDeploymentItem:IDeployableEnvironmentForm=this.deployableEnvironmentContractMapperService
.mapDeployableEnvironmentContractToDeployableEnvironmentForm(
数据项,
客户,
环境);
console.log('4',editableDeploymentItem);
this.editDeployment=editableDeploymentItem;
this.isNew=false;
});
}
而是使用this.clientWebApiService.getClients().flatMap(()=>{})
您可以使用this.clientWebApiService.getClients().map(()=>{})试试吗
阅读可能会有帮助而不是使用this.clientWebApiService.getClients().flatMap(()=>{})
您可以使用this.clientWebApiService.getClients().map(()=>{})试试吗
阅读可能有帮助你应该使用do
<代码>执行
操作员只需执行一个操作并继续执行蒸汽。在你的例子中,我不明白你为什么需要另一个操作符,因为它可以在subscribe
方法本身中完成
您只需执行以下操作:
public editHandler({ dataItem }): void {
let clients: IClientContract[];
let environments: IEnvironmentContract[];
this.clientWebApiService.getClients()
.flatMap((clientsResult: any): Observable<IEnvironmentContract[]> => {
clients = clientsResult as IClientContract[];
console.log('1', clients);
return this.environmentWebApiService.getEnvironmentsNotInPipeline();
})
.subscribe((environmentResult: IEnvironmentContract[]): any => {
environments = environmentResult;
console.log('2', environments);
console.log('3');
let editableDeploymentItem: IDeployableEnvironmentForm = this.deployableEnvironmentContractMapperService
.mapDeployableEnvironmentContractToDeployableEnvironmentForm(
dataItem,
clients,
environments);
console.log('4', editableDeploymentItem);
this.editDeployment = editableDeploymentItem;
this.isNew = false;
});
}
public editHandler({dataItem}):void{
让客户:IClientContract[];
let环境:IEnEnvironmentContract[];
this.clientWebApiService.getClients()
.flatMap((客户端结果:任意):可观察=>{
clients=clientsResult作为IClientContract[];
console.log('1',客户端);
返回此.environmentWebApiService.getEnvironmentsNotInPipeline();
})
.subscribe((环境结果:IEnvironmentContract[]):any=>{
环境=环境结果;
console.log('2',环境);
console.log('3');
让editableDeploymentItem:IDeployableEnvironmentForm=this.deployableEnvironmentContractMapperService
.mapDeployableEnvironmentContractToDeployableEnvironmentForm(
数据项,
客户,
环境);
console.log('4',editableDeploymentItem);
this.editDeployment=editableDeploymentItem;
this.isNew=false;
});
}
您应该使用do
<代码>执行
操作员只需执行一个操作并继续执行蒸汽。在你的例子中,我不明白你为什么需要另一个操作符,因为它可以在subscribe
方法本身中完成
您只需执行以下操作:
public editHandler({ dataItem }): void {
let clients: IClientContract[];
let environments: IEnvironmentContract[];
this.clientWebApiService.getClients()
.flatMap((clientsResult: any): Observable<IEnvironmentContract[]> => {
clients = clientsResult as IClientContract[];
console.log('1', clients);
return this.environmentWebApiService.getEnvironmentsNotInPipeline();
})
.subscribe((environmentResult: IEnvironmentContract[]): any => {
environments = environmentResult;
console.log('2', environments);
console.log('3');
let editableDeploymentItem: IDeployableEnvironmentForm = this.deployableEnvironmentContractMapperService
.mapDeployableEnvironmentContractToDeployableEnvironmentForm(
dataItem,
clients,
environments);
console.log('4', editableDeploymentItem);
this.editDeployment = editableDeploymentItem;
this.isNew = false;
});
}
public editHandler({dataItem}):void{
让客户:IClientContract[];
let环境:IEnEnvironmentContract[];
this.clientWebApiService.getClients()
.flatMap((客户端结果:任意):可观察=>{
clients=clientsResult作为IClientContract[];
console.log('1',客户端);
返回此.environmentWebApiService.getEnvironmentsNotInPipeline();
})
.subscribe((环境结果:IEnvironmentContract[]):any=>{
环境=环境结果;
console.log('2',环境);
console.log('3');
让editableDeploymentItem:IDeployableEnvironmentForm=this.deployableEnvironmentContractMapperService
.mapDeployableEnvironmentContractToDeployableEnvironmentForm(
数据项,
客户,
环境);
console.log('4',editableDeploymentItem);
this.editDeployment=editableDeploymentItem;
this.isNew=false;
});
}