.task{} 내 비동기처리
안녕하세요
저희가 구현하고 있는 코드 중에서 Firebase에 있는 데이터를 화면이 생성될 때 로드해서 처리하고 싶은 코드가 잇습니다.
1. Firebase 데이터를 로드 → 로드된 데이터를 사용하여 변수에 저장
이렇게 하고싶습니다.
그런데 Firebase 데이터를 로드하는 fetch 함수가 비동기 처럼 진행이 되는 것 같습니다.
.task{} 안에서 fetch 함수 실행 → 완료 → 다른 함수 실행 이렇게 진행하고 싶은데,
현재는 fetch함수 실행 → 다른 함수 실행 → fetch 함수 실행 완료
이렇게 되다보니 저희의 의도대로 진행되지 않고있습니다. 뷰가 나타났을 때마다 fetch 함수가 실행되고 정상적으로 완료되면 다른 함수가 실행되도록 하기위한 방법이 무엇이 있을까요?
화면캡쳐(예시)
위 질문에 해당하는 질문의 링크나 스크린샷을 여기에 추가해 멘토분들이 참고할 수 있도록 하세요.
해결 방안
뷰를 그리는 시점과 fetchProduct를 통해 product를 받아오는 시점이 문제였습니다.
뷰를 먼저 그리고 fetchProduct를 실행하면서 계속 productDic에 빈 딕셔너리가 넘어오고 이걸 !로 강제 언래핑을 하면서 처음 뷰를 그릴 때 앱이 터졌습니다.
따라서 productDic이 isEmpty인지를 검증하여 Empty인 경우 기본 값을 넣어주도록 수정해주었습니다.
<해결 포인트>
•
break point를 잘 활용하자.
•
뷰가 언제 그려지는지 파악하자.