Как использовать await вместо .then () в Dart - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть следующие строки в приложении Flutter._devicesRef относится к некоторому узлу в базе данных Firebase Realtime.

_devicesRef.child(deviceId).once().then((DataSnapshot data) async {
    print(data.key);
    var a = await ...
    print(a);
}

Эти строки работают нормально.Теперь я хочу использовать await вместо .then().Но почему-то once() никогда не возвращается.

var data = await _devicesRef.child(deviceId).once();
print(data.key);
var a = await ...
print (a);

Так что print(data.key) никогда не вызывается.

Что здесь не так?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Это можно объяснить кодом, следующим за вашим фрагментом.Возможно, будущее завершение будет вызвано чем-то после вашего кода, и преобразование вашего кода с помощью await будет ждать до завершения, которое никогда не произойдет.

Например, работает следующий код:

main() async {
  final c = Completer<String>();
  final future = c.future;
  future.then((message) => print(message));
  c.complete('hello');
}

, ноне эта асинхронная / ожидающая версия:

main() async {
  final c = Completer<String>();
  final future = c.future;
  final message = await future;
  print(message);
  c.complete('hello');
}
0 голосов
/ 13 декабря 2018

это должно быть заключено в асинхронную функцию, подобную этой, чтобы использовать await

Furtre<T> myFunction() async {
  var data = await _devicesRef.child(deviceId).once();
  return data;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...