我正在使用 Angular10。呼叫 GraphQL 查詢。當我使用不同的 POST 資料多次呼叫同一個 GraphQL 查詢時,所有 API 呼叫都會被取消,除了最后一個。
但我希望所有的 API 都需要被呼叫。
在app.module.ts提供者中有這個配置
{
provide: APOLLO_OPTIONS,
useFactory: (httpLink: HttpLink) => {
const http = httpLink.create({uri: '/graphql'});
const errors = onError(({graphQLErrors, networkError}) => { return graphQLErrors; });
const link = errors.concat(http);
return {
link,
cache: new InMemoryCache(),
};
},
deps: [HttpLink],
}
應用服務.ts
public getEmployeesData(
input: {projectId: number}
): Observable<ApolloQueryResult<{employee_query: any}>> {
return this.apollo.watchQuery<{employee_query: any}>({
query:gql` query employee_query(
$projectId: INT!
) {
employee_query(
projectId: $projectId
) {
firstname
lastname
empId
disignation
}
},
variables: input,
}).valueChanges;
}
我的效果.ts
@Effect()
public getEmployee(): Observable<IAction<any | HttpErrorResponse>> {
return this._actions$.pipe(
ofType(EmployeeAction.GET_EMPLOYEE_DATA),
switchMap((action: IAction<any>) => {
return this.getEmployeesData(action.payload).pipe(map(
(
response: ApolloQueryResult<{
employee_query?: any;
}>,
) => {
return EmployeeAction.getEmployeeResponse(
response.data.employee_query
);
},
),
);
}),
);
}
uj5u.com熱心網友回復:
這里的問題發生是因為使用switchMap. 它專門設計為像您描述的那樣:
當一個新的內部 Observable 被發射時,switchMap 停止從之前發射的內部 Observable 發射專案,并開始從新的發射專案。對于后續的內部 Observable,它繼續表現得像這樣。
在你的情況下,mergeMap會更適合:
回傳一個 Observable,該 Observable 基于將您提供的函式應用于源 Observable 發出的每個專案,其中該函式回傳一個 Observable,然后合并這些結果 Observable 并發出此合并的結果來發射專案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516440.html
下一篇:現在能夠以角度從物件讀取資料
