• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

viewModel이 생성되자마자 비동기 함수를 실행시키는 방법에 대해

22.12.27 19:31 작성 조회수 311

0

안녕하세요.

강사님 덕에 클린 아키텍처와 조금씩 가까워지고 있는 수강생입니다.

너무 많이 여쭤봐서 죄송하지만 제 힘으로는 좋은 답을 얻을 수가 없이 질문 드립니다.

 

뷰 모델이 생성되자마자 데이터를 인터넷 등에서 비동기로 가지고 와야 할 때 고민이 생깁니다.

뷰 모델에서 async 함수를 만들어 뷰 모델 생성자에 넣으면, 생성자에서는 await가 안되기 때문에 즉시 데이터를 가져오지 못하고,

뷰 모델이 생성되기 전에, navigator.push를 통해 뷰 모델을 계속 생성하여 생성자 주입으로 넣어주면, async 함수를 또다른 뷰모델에서 사용해야 한다는 문제?가 있지 않나 싶습니다.

A에서 B로 이동하는 화면에서 B의 데이터를 A의 뷰모델에서 전달해주는 것이 옳바른가 하는 의문입니다.

답은 없지만 강사님의 의견을 듣고 싶습니다.

감사합니다.

 

답변 1

답변을 작성해보세요.

1

뷰 모델 생성자에서 Future 함수를 실행하고 then() 으로 받거나,

뷰 모델 내부에 별도의 Future 함수를 만들고 그 내부에서 await 코드를 사용합니다.

class ViewModel {
  ViewModel() {
     // 여기서는 실행만
     init();
  }
   
  Future<void> init() async {
     // 실행할 코드 작성, await 가능
     await 실행할함수();
  }
}

뷰모델 생성시 생성자로 넣어주는 방법도 좋은 방법입니다.