나는 그것이 옳은 것인지 아닌지를 알기 위해 이것을 쓰고있다. 온라인으로 볼 예에ngrx/effects의 "부작용"개념의 올바른 사용에 대한 디자인 심문
, 패턴은 일반적으로 다음과 같이 간다 (추가 여기에 예/원격 데이터베이스 상태에와에 대한 삭제 작업) :
effects.ts :
@Effect()
add$ = this.action$
.ofType(ADD)
.switchMap((action: Action) => {
return this.http.put(...)
.map(response => response.json())
.map(response => Observable.of({ type: ADD_SUCCESS, payload: action.payload }))
.catch(response => Observable.of({ type: ADD_FAIL, payload: response.status }))
감속기. TS
...
switch (action.type){
case 'ADD_SUCCESS':
...
return new_state;
case 'ADD_FAIL':
return state;
}
그것은 을 작동하지만 사용자가 느끼는대로 실행의 속도는 네트워크 얼마나 빨리에 따라 달라집니다.
reducer.ts
...
switch (action.type){
case 'ADD':
... // make the adequate addition
return new_state;
case 'ADD_FAIL':
... // delete the addition previously made
return new_state;
}
effects.ts :
@Effect()
add$ = this.action$
.ofType(ADD)
.switchMap((action: Action) => {
return this.http.put(...)
.map(response => response.json())
.catch(response => Observable.of({ type: ADD_FAIL, payload: action.payload }))
이에 그래서 높은 확률에 베팅 오류가 API에서 반환되지 않는다는 패턴 함께했다 패턴으로 데이터베이스에 저장하는 작업은 실제로 "부작용"입니다. API가 오류를 반환하는 경우는있을 수 있지만 가능한 경우에는 두 번째 작업이 수행되어 첫 번째 작업을 실행 취소합니다.
그러나 나는 온라인에서 제공 한 예제에서이 디자인을 아직 발견하지 못했습니다. 나는 아마추어 개발자이므로, 결국에는 잘못되었거나 위험하거나 비효율적 인 무언가를 놓쳤는 지 궁금합니다.
빠르고 정확한 답변을 해주신 Tyler에게 감사드립니다. 고전적인 디자인이 더 낫다는 것을 당신이 보여주는 예들에 동의합니다. 제안 된 디자인과 중요하지 않은 데이터 (예 : 프로젝트와 같은)에 대해서는 사용자에게 적절한 UI를 제공하여 자신의 행동이 완료되지 않았 음을 이해하도록 노력할 것입니다. – guenam