Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

리듀서와 앱 전역 이벤트 문의 #18

Closed
flyskyne opened this issue Feb 10, 2017 · 6 comments
Closed

리듀서와 앱 전역 이벤트 문의 #18

flyskyne opened this issue Feb 10, 2017 · 6 comments

Comments

@flyskyne
Copy link

안녕하세요.

리듀서에서 공통 응답 헤더에 따라 실패 처리를 해주고 싶은데 방법을 모르겠네요.
예를 들면 아래와 같은 응답의 경우 요청에 자체를 성공을 한 것이지만 앱에서는 실패로 처리를 하여야 하는데요.

{
  "header": {
    "isSuccessful": false,
    "message": "Error"
  },
  "data": null
}

리듀서의 onSuccess()를 정의하여 처리하려 하여도 리듀서의 소스를 보면 단순히 success 함수의 배열을 차례대로 호출만 해주고 있을 뿐 반환 값의 여부를 보아 실패 처리한다든가 하는 것이 불가능해 보여 방법이 있는 것인지 궁금합니다.

작성하는 동안 this.addError()를 쓰면 되겠다는 생각이 드네요..

또 리듀서의 소스를 보면 fail()과 finish()에서 this.removeAction()를 호출해주고 있습니다.
만약 onSuccess()에서 finish()를 호출하지 않는다면 직접 removeAction() 처리를 해주어야 하는 것인지요?
마찬가지로 onFail()에서 removeAction()를 직접 처리해주어야 하는지요?

그리고 앱 전역 이벤트로 error 이벤트가 발생했을 경우 레이어 팝업으로 표시를 해주려고 하는데요.
팝업 뷰를 정의했다고 했을 때 이 뷰를 동적으로 추가해주려면 어떻게 해야 하는지요?
뷰 내부에서는 this.addView()를 통해 가능한 것으로 보이는데요.
앱의 이벤트 핸들러에서는 어떤 방법이 예제나 설명을 뒤져보아도 보이지 않아서 질문 드립니다.
물론 뷰의 기능을 무시하고 직접 jQuery를 이용하여 조작하여도 되겠지만 방법이 있을지요?
설명에는 토스트 등을 보여주는데 사용할 수 있다고 되어 있는데 구체적인 방법을 알려주실 수 있을지요?

@woowa
Copy link
Contributor

woowa commented Feb 10, 2017

안녕하세요. 질문 별로 나누어서 답변드립니다.

리듀서에서 공통 응답 헤더에 따라 실패 처리를 해주고 싶은데 방법을 모르겠네요.
예를 들면 아래와 같은 응답의 경우 요청에 자체를 성공을 한 것이지만 앱에서는 실패로 처리를 하여야 하는데요.

{
  "header": {
    "isSuccessful": false,
    "message": "Error"
  },
  "data": null
}

리듀서의 onSuccess()를 정의하여 처리하려 하여도 리듀서의 소스를 보면 단순히 success 함수의 배열을 차례대로 호출만 해주고 있을 뿐 반환 값의 여부를 보아 실패 처리한다든가 하는 것이 불가능해 보여 방법이 있는 것인지 궁금합니다.

작성하는 동안 this.addError()를 쓰면 되겠다는 생각이 드네요..


요청의 응답이 성공이라면 리듀서에서는 onSuccess로 처리가 됩니다. onSuccess에서 응답 헤더를 판단하여 this.finish(error) 라던지 필요한 처리를 하시면 됩니다.

@woowa
Copy link
Contributor

woowa commented Feb 10, 2017

또 리듀서의 소스를 보면 fail()과 finish()에서 this.removeAction()를 호출해주고 있습니다.
만약 onSuccess()에서 finish()를 호출하지 않는다면 직접 removeAction() 처리를 해주어야 하는 것인지요?
마찬가지로 onFail()에서 removeAction()를 직접 처리해주어야 하는지요?


removeAction를 필수로 호출해야 하진 않습니다만. 위의 방법처럼 this.finish(error) 정도로 처리하시면 좋을 것 같습니다.

@woowa
Copy link
Contributor

woowa commented Feb 10, 2017

그리고 앱 전역 이벤트로 error 이벤트가 발생했을 경우 레이어 팝업으로 표시를 해주려고 하는데요.
팝업 뷰를 정의했다고 했을 때 이 뷰를 동적으로 추가해주려면 어떻게 해야 하는지요?
뷰 내부에서는 this.addView()를 통해 가능한 것으로 보이는데요.
앱의 이벤트 핸들러에서는 어떤 방법이 예제나 설명을 뒤져보아도 보이지 않아서 질문 드립니다.
물론 뷰의 기능을 무시하고 직접 jQuery를 이용하여 조작하여도 되겠지만 방법이 있을지요?
설명에는 토스트 등을 보여주는데 사용할 수 있다고 되어 있는데 구체적인 방법을 알려주실 수 있을지요?


전역 이벤트 error를 사용하는 방법은 권장하지 않고 있습니다. View 내부에서 error를 처리( 팝업 뷰라던지 )하는 것이 좋을 것 같습니다.

@woowa
Copy link
Contributor

woowa commented Feb 10, 2017

추가.
모든 리듀서에서 공통으로 헤더를 판단해야 한다면 리듀서 내에서 use 메소드를 사용하여 미들웨어를 주입하여 처리할 수도 있습니다. 최근에 추가된 기능이어서 아직 문서가 업데이트 안되었는데요. 문서가 업데이트되면 전해드리겠습니다.
예) this.use(Woowahan.Reducer.SUCCESS, successHandler);

감사합니다.

@flyskyne
Copy link
Author

마지막 답변은 문서 업데이트를 기다리겠습니다. :)
현재는 listview 예제를 참고하여 coreReducer를 정의하여 구현하였는데 좀더 좋은 방법이 있는 것 같습니다.

답변 고맙습니다.

@ibare
Copy link
Contributor

ibare commented Feb 10, 2017

@flyskyne 리듀서 미들웨어 주입하는 다음의 예제를 참고하세요. :)

https://gist.github.com/ibare/d6bceb1bb9df2b412afaf4302e053537

참고로 리듀서에서 dispatch의 핸들러로 결과를 보내는 this.finish 메소드는 인자 구성 방식에 제약이 없는데요. 이를 이용해 첫 인자는 error 객체, 두 번째 인자는 응답 메세지 객체로 작성하는 방법을 컨벤션으로 사용하고 있습니다. (node 쪽 API 의 컨벤션과 유사합니다. ^^)

그러면 핸들러 쪽에선 성공과 오류에 대하여 일관된 코드 작성이 가능합니다.

this.dispatch(Woowahan.Action.create(USERS), function(err, resp) {
  if (err) {
    // 오류 처리 
  }

 // 응답 처리
});

@ibare ibare closed this as completed Feb 14, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants