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인 값만 찍히게 되었다.