flutter
Stream과 Future
잼민코더
2021. 12. 1. 13:12
특정 값의 카운트를 업데이트해주는 함수와 동시에 연속적으로 다음 calculateVote 함수를 사용해봤다.
이전 함수에서 특정 프로퍼티값을 0에서 1로 트랜잭션 처리에서 업데이트시켜줬고,
새로 갱신된 값이 반영되야하는데 반영이안된다.
Future calculateVote(AppVote vote) async {
var allvoteItemRef = _db.collection('votes').doc(vote.voteUid).collection('voteItem');
Stream<QuerySnapshot<Map<String, dynamic>>> listQs = allvoteItemRef.snapshots();
listQs.forEach((element) async{
element.docs.forEach((docsElement) async {
if(docsElement.data()!['count'] == 0){
print('카운트 0 인 문서의 아이디 >> ' + docsElement.id.toString());
}
else {
}
});
});
}
총 리스트 안의 엘리먼트는 두개가 존재하고, 한개의 값이 0이 아니고 1이 되었기 때문에 카운트 0인 문서의 아이디는
총 두개중에 여전히 0인 요소의 아이디가 한번만찍혀야되는데
1로 갱신되기 전의 요소 아이디도 콘솔에 찍힌다. 갱신된 값이 포문의 조건문에 안걸린다.
Future calculateVote(AppVote vote) async {
var listQs = await Future.wait([
_db.collection('votes').doc(vote.voteUid).collection('voteItem').get()
]);
listQs.forEach((element) async{
element.docs.forEach((docsElement) async {
if(docsElement.data()!['count'] == 0){
print('카운트 0 인 문서의 아이디 >> ' + docsElement.id.toString());
}
else {
}
});
});
}
Future.wait 를 사용하니 갱신된 값이 반영되어 콘솔에 카운트가 1이된 값은 찍히지않고 0인 값만 찍히게 되었다.