firebase - 颤动等待结果始终为空
问题描述
这是我的功能
Future<Address> readAddress() async {
database = FirebaseDatabase(app: app);
await database
.reference()
.child(table_name)
.child(uid)
.once()
.then((DataSnapshot snapshot) {
print("address_start");
if (snapshot.value == null) {
print("address_start_value_null");
return null;
} else {
print("address_start_value_not_null");
print(snapshot.value);
Address a = Address().map(snapshot.value);
return a;
// return a;
}
}).catchError((onError) {
print(onError);
return onError;
});
}
这是我的函数调用
readAddress().then((address) {
if (address != null) {
print("address read seucssfully " + address.firstname);
} else {
print(
"address read faield result is null $address"); // + address.toString());
}
}).catchError((onError) {
print("error on read address");
});
但在这里它总是返回 null。
这里有什么问题?
来自 readAddress() 函数的消息
[dart] 此函数的返回类型为“Future”,但不以 return 语句结束。[缺少返回]
我不知道解释更多 StackOverflow 在尝试发布此问题时显示此错误消息“t 看起来您的帖子主要是代码;请添加更多详细信息。”
解决方案
您的函数的问题在于它没有返回 Future,而是返回 Address 对象。我会像这样重写你的函数只返回地址对象
Future<Address> readAddress() async {
try{
database = FirebaseDatabase(app: app);
DataSnapshot snapshot = await database
.reference()
.child(table_name)
.child(uid)
.once();
return Address().map(snapshot.value);
}catch(e) {
print(e);
return(e);
}
}
有了这个,你的函数调用可以是这样的:
Address address = readAddress();
很简单,不是吗?我已经处理了函数内部的所有错误处理。
推荐阅读
- php - php通过id将多个记录输入到对象中以供稍后输出
- c# - 登录窗口未处理异常
- firebase - 保护 Google Actions 和 FireBase Endpoint
- python - google protobuf3 如何将消息转换为 Json?
- validation - 使用解析器时如何在 graphql-spring-boot 中引发多个验证错误?
- git - 使用“git checkout -b”从公共存储库创建新分支
- azure - Azure 数据仓库:如何将本地日期时间转换为变量?
- exec - inno setup exec appref-ms
- docker - Traefik/Docker:使用端口作为前端规则(而不是路径或子域)
- webgl - Right order to specifying framebuffer and binding uniform textures?