javascript - How do I ensure setState is called after the Firebase query populates array? -
i new firebase , using react native. trying populate listview data firebase. see can use promises in firebase, however, seems cannot use them .on()
, .once
. because need listen changes, need use .on()
.
the challenge me comes when want ensure state set after (and after) data retrieved firebase. code below:
listen() { var self = var currentuserid = firebase.auth().currentuser.uid var postlist = firebase.database().ref('/users/'+currentuserid+'/postkeys') postlist.on('value', function(snapshot) { var posts = [] snapshot.foreach((child)=> { var postid = child.val().postid var postref = firebase.database().ref('posts/'+postid) postref.orderbychild('sorteddateinmilliseconds').on('value', function(postsnap) { posts.push(postsnap.val()) }) }) self.setstate({ postcount:posts.length, datasource:self.state.datasource.clonewithrows(posts) }) }) }
the result empty view because render()
called before query populates posts array. know how ensure self.setstate({})
called after query populates array?
thank help.
i'm not entirely sure mean being called empty array. reason can imagine if called when there no data yet @ location. if cause, can detect snapshot.exists()
:
listen() { var self = var currentuserid = firebase.auth().currentuser.uid var postlist = firebase.database().ref('/users/'+currentuserid+'/postkeys') postlist.on('value', function(snapshot) { if (snapshot.exists()) { var posts = [] snapshot.foreach((child)=> { var postid = child.val().postid var postref = firebase.database().ref('posts/'+postid) postref.orderbychild('sorteddateinmilliseconds').on('value', function(postsnap) { posts.push(postsnap.val()) }) }) self.setstate({ postcount:posts.length, datasource:self.state.datasource.clonewithrows(posts) }) } }) }
if not fix problem, can set jsbin reproduces it?
Comments
Post a Comment