returning a value in sync and await in dart -


i trying understand usage of async , await in dart. somehow having issues returning values in methods.

consider code below

future<int> getmrn() async {   var mrnref = await firebaseclient.child('mrn');    datasnapshot ss;   streamsubscription<event> onvaluesubscription = await mrnref.onvalue       .listen((event) {     ss = event.snapshot;      return ss.val();   });    //return future<int> ss.val(); } 

mrn of type int should returned getmrn method. each time returned ss.val() returns null. seems ss = event.snapshot not seen in last returned value

what correct way of doing this. thanks

in code above, you're declaring anonymous function (event){..} callback, , return statement relates it, while intention return getmrn().

what need, complete future you're returning getmrn() inside callback.

like this:

future<int> getmrn() async {   var mrnref = await firebaseclient.child('mrn');    completer<int> c = new completer<int>();   streamsubscription<event> onvaluesubscription = await mrnref.onvalue       .listen((event) {     datasnapshot ss = event.snapshot;     c.complete(ss.val());   });    return c.future; } 

but code wouldn't work if there second event appear in mrnref.onvalue stream. so, assuming mrnref.onvalue stream, , need first event, better rewrite way:

future<int> getmrn() async {   var mrnref = await firebaseclient.child('mrn');    event event = await mrnref.onvalue.first;   datasnapshot ss = event.snapshot;   // note, you're implicitly returning future<int> here,   // because our function asyncronous   return ss.val(); } 

Comments

Popular posts from this blog

python - No exponential form of the z-axis in matplotlib-3D-plots -

php - Best Light server (Linux + Web server + Database) for Raspberry Pi -

c# - "Newtonsoft.Json.JsonSerializationException unable to find constructor to use for types" error when deserializing class -