该组件有一个服务调用,响应后您需要检查内部状态或调用另一个方法或显示模式窗口,然后调用此方法。这导致订阅中的订阅。请告诉我如何删除第二个订阅。条件代码:stackblitz 上的示例代码
主页
/
user-303296
Lukas's questions
有4个服务。$service1、$service2、$service3、$service4。需要检查第一个的答案,如果那里满足条件,则调用第二个服务,您应该始终调用第三个和第四个服务。
$service1.pipe(
switchMap(result1 => {
this.answer1 = result1;
// вот тут надо по условию вызывать или не вызывать $service2 в зависимости от result1
return forkJoin([$service3, $service4])
})
).subscribe(([result3, result4]) => {
this.answer3 = result3;
this.answer4 = result4;
})
我不知道如何正确链接调用。
有3个服务需要依次调用:Observable1$、Observable2$、Observable3$
我是这样打电话的:
Observable1$.pipe(
switchMap(createResponse => Observable2$(createResponse.param)),
switchMap(result => Observable3$()),
takeUntil(this.unsubscribe)
).subscribe(result => result.status === 'ok' ? this.showSuccess() : this.showError())
但后来我意识到我需要检查调用 Observable1 $ 的结果,如果它在那里失败,那么接下来的两个调用就不需要进行了。
我无法以任何方式找到如何正确构建调用链或如何按条件停止线程。
有一个多项目应用程序。
第一个子项目:
@NgModule({
declarations: [
AppComponent,
AComponent,
],
imports: [
BrowserModule,
AngularMaterialModule,
ReactiveFormsModule
],
providers: providers,
exports: [
AComponent
],
bootstrap: [AppComponent]
})
export class AppModule { }
@NgModule({})
export class ComponentASharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: AppModule
};
}
}
第二个子项目:
@NgModule({
declarations: [
AppComponent,
BComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
TranslateModule,
],
exports: [BComponent],
providers: providers,
bootstrap: [AppComponent]
})
export class AppModule {
}
@NgModule({})
export class ComponentBSharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: AppModule,
providers: providers
};
}
}
我想创建一个第三个子项目,我想在其中显示 AComponent 和 BComponent。如果我这样做:
@NgModule({
declarations: [
AppComponent,
AComponent,
BComponent
],
imports: [
BrowserModule,
AppRoutingModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
@NgModule({})
export class ComponentCSharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: AppModule
};
}
}
然后我得到一个错误,AComponent 和 BComponent 在多个 Angular 模块中声明:AppModule 和 AppModule。
请告诉我,是否可以这样做或者是否应该将这两个组件移到主模块中?
我有一个对象列表:
{
"rn": "14",
"time": "2020-06-16 16:47:55",
"id": 42332392988,
"termname": "S1160AFB",
"type": "100",
"trancode": "110",
"pan": "4790729949581839",
"amount": "360.96",
"approvalcode": "44444"
},
{
"rn": "15",
"time": "2020-06-16 16:48:55",
"id": 42330308379,
"termname": "S1160AFB",
"type": "100",
"trancode": "110",
"pan": "4149510064617121",
"amount": "360.96",
"approvalcode": "55555"
},
{
"rn": "13",
"time": "2020-06-16 16:49:11",
"id": 42332530886,
"termname": "S1160AFB",
"type": "420",
"trancode": "110",
"pan": "4790729949581839",
"amount": "360.96",
"approvalcode": "44444"
}
一个任务:
- 查找具有相同批准码的对象。(它是唯一的,只能重复2次)
- 如果有两个对象,并且第二个对象的日期晚于类型字段中的第一个对象,则类型字段的值为 420。然后从列表中删除这两个对象。
我的决定:
- 我按字段批准代码和日期对列表进行排序。
List<Transaction> filteredTrans = transResponse.getTransaction().stream().sorted(Comparator.comparing(Transaction::approvalcode).thenComparing(Transaction::getTime))
.collect(Collectors.toList());
- 我比较两个对象并删除它们是否满足我需要的条件。
int j = 1;
for (int i=0; i<filteredTrans.size()-1; i++) {
if (filteredTrans.get(i).getApprovalcode().equals(filteredTrans.get(j).getApprovalcode()) && filteredTrans.get(j).getType().equals("420")) {
filteredTrans.remove(i);
filteredTrans.remove(j);
j++;
}
但第二部分对我来说看起来很糟糕。建议,请,适当的决定。