在ngrx效果中调用两次被调用的服务可以通过以下步骤实现:
Effect()
装饰器来定义一个触发该效果的动作。例如:import { Injectable } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { mergeMap, map } from 'rxjs/operators';
import { YourService } from './your-service';
@Injectable()
export class YourEffects {
constructor(private actions$: Actions, private yourService: YourService) {}
yourEffect$ = createEffect(() =>
this.actions$.pipe(
ofType('[Your Module] Your Action'),
mergeMap(() =>
this.yourService.yourMethod().pipe(
map(response => ({
type: '[Your Module] Your Action Success',
payload: response
}))
)
)
)
);
}
在上述代码中,yourEffect$
是一个ngrx效果,它会在触发[Your Module] Your Action
动作时调用yourMethod()
方法。
yourMethod()
方法。该方法可以执行任何你需要的操作,例如调用API、处理数据等。例如:import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class YourService {
constructor(private http: HttpClient) {}
yourMethod(): Observable<any> {
// 调用第一次服务
const firstCall$ = this.http.get('your-api-url-1');
// 调用第二次服务
const secondCall$ = this.http.get('your-api-url-2');
// 合并两次调用的结果
return forkJoin([firstCall$, secondCall$]);
}
}
在上述代码中,yourMethod()
方法使用HttpClient
来发起两次服务调用,并使用forkJoin()
操作符将两次调用的结果合并为一个Observable。
[Your Module] Your Action
动作,以调用两次被调用的服务。你可以使用ngrx的store.dispatch()
方法来触发该动作。例如:import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { yourAction } from './your-module.actions';
@Component({
selector: 'your-component',
template: `
<button (click)="callServices()">Call Services</button>
`
})
export class YourComponent {
constructor(private store: Store) {}
callServices() {
this.store.dispatch(yourAction());
}
}
在上述代码中,当用户点击"Call Services"按钮时,callServices()
方法会触发[Your Module] Your Action
动作,从而调用两次被调用的服务。
这样,你就可以在ngrx效果中调用两次被调用的服务了。请注意,以上代码仅为示例,你需要根据你的实际需求进行适当的修改和调整。
领取专属 10元无门槛券
手把手带您无忧上云