작성자 없음
작성자 정보가 삭제된 글입니다.
작성
·
43
0
Future<List<FeedModel>> getFeedList() async {
QuerySnapshot<Map<String, dynamic>> snapshot = await firebaseFirestore
.collection('feeds')
.orderBy('createAt', descending: true)
.get();
return await Future.wait(snapshot.docs.map((e) async {
Map<String, dynamic> data = e.data();
DocumentReference<Map<String, dynamic>> writerDocRef = data['writer'];
DocumentSnapshot<Map<String, dynamic>> writerSnapshot =
await writerDocRef.get();
UserModel userModel = UserModel.fromMap(writerSnapshot.data()!);
data['writer'] = userModel;
return FeedModel.fromMap(data);
}).toList());
}
이부분에서
return await Future.wait(snapshot.docs.map((e) async {
Map<String, dynamic> data = e.data();
DocumentReference<Map<String, dynamic>> writerDocRef = data['writer'];
DocumentSnapshot<Map<String, dynamic>> writerSnapshot =
await writerDocRef.get();
UserModel userModel = UserModel.fromMap(writerSnapshot.data()!);
data['writer'] = userModel;
return FeedModel.fromMap(data);
이부분을 왜 이리 이해하기가 어려운지 모르겠어요..
저만 그런가요...돌려봐도 싶지 않네요.
.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
vadain2000님께서 질문해주신 코드는 Firebase Firestore에서 피드 데이터를 가져오는 함수로, 각 피드에 포함된 ‘writer’ 필드의 참조를 바탕으로 사용자 정보를 가져와 UserModel
로 변환하는 과정을 담고 있습니다.
이해를 도와드리기 위해 코드를 간단히 설명드리겠습니다:
Firestore에서 데이터 가져오기: getFeedList()
함수는 Firestore의 ‘feeds’ 컬렉션에서 생성 날짜 기준으로 최근 데이터부터 순서대로 QuerySnapshot
으로 가져오고 있습니다.
비동기 데이터 처리: snapshot.docs.map((e) async { ... })
구문은 각 피드 문서에 대해 비동기적으로 데이터를 처리하기 위해 사용되었습니다. 여기서 Future.wait
를 사용하여 모든 피드 문서에 대한 비동기 작업이 모두 완료될 때까지 기다리도록 하고 있습니다.
사용자 정보 참조: 각 피드 문서의 ‘writer’ 필드는 실제 사용자 정보를 저장하는 문서의 참조입니다. 이를 통해 writerDocRef.get()
을 사용하여 해당 사용자의 DocumentSnapshot
을 가져옵니다.
UserModel 변환 및 데이터 갱신: 가져온 사용자 정보를 UserModel.fromMap
을 사용하여 UserModel
객체로 변환하고 피드 데이터의 ‘writer’를 이를 바탕으로 갱신합니다. 마지막으로, 이 갱신된 데이터를 사용하여 FeedModel
을 생성하고 반환합니다.
이 과정이 복잡하게 느껴질 수 있습니다. 왜냐하면 비동기 프로그래밍 및 Firestore 데이터 참조가 함께 사용되기 때문입니다. 익숙해지기까지 시간이 조금 걸릴 수 있지만, Firebase 문서와 관련 자료를 참고하여 개념을 하나씩 익히시면 이해에 큰 도움이 될 것입니다.
또한, 비슷한 주제를 다루는 질문으로는 이 링크에서 ‘제 질문이 해결되지 않았어요! 피드 문제에 대해 문서 참조와 비동기 처리에 대해 더 설명해주세요.‘라는 질문이 있었으니, 참고하시면 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.