调用 Future 的函数也需要是 Future 吗?
Does a function that calls a Future needs to be a Future too?
我有一个调用 Future 的函数。现在我不确定第一个功能是否也需要成为未来才能等待数据。这是我的代码:
FireBaseHandler handler = FireBaseHandler();
saveRows() {
handler.saveRows(plan.planId, plan.rows); ///this is a future
}
在我的 FireBaseHandler class 我有这个未来:
final CollectionReference usersCol =
FirebaseFirestore.instance.collection('users');
Future saveRows(String id, data) async {
return await usersCol.doc(myUser.uid).collection('plans').doc(id)
.update({'rows': data});
}
那么第一个函数也需要是 Future 吗?
您可以在 sync
函数中包含 async
函数。但是这样你就失去了 await
的能力。并且 await
只允许在标记为 async
的函数中使用,这导致我们作为该函数的结果得到 Future
。所以,是的,如果你需要等待结果,两个函数都必须是 Future
函数。
编辑:
如果你需要你的包装函数是 sync
,但仍然能够从内部 async
函数中检索结果,你可以使用回调:
saveRows(Function(dynamic) callback) {
handler.saveRows(plan.planId, plan.rows).then((result){
callback(result);
});
}
这样在调用函数后的任何时间点都可以检索结果(代码未 await
ed)
我有一个调用 Future 的函数。现在我不确定第一个功能是否也需要成为未来才能等待数据。这是我的代码:
FireBaseHandler handler = FireBaseHandler();
saveRows() {
handler.saveRows(plan.planId, plan.rows); ///this is a future
}
在我的 FireBaseHandler class 我有这个未来:
final CollectionReference usersCol =
FirebaseFirestore.instance.collection('users');
Future saveRows(String id, data) async {
return await usersCol.doc(myUser.uid).collection('plans').doc(id)
.update({'rows': data});
}
那么第一个函数也需要是 Future 吗?
您可以在 sync
函数中包含 async
函数。但是这样你就失去了 await
的能力。并且 await
只允许在标记为 async
的函数中使用,这导致我们作为该函数的结果得到 Future
。所以,是的,如果你需要等待结果,两个函数都必须是 Future
函数。
编辑:
如果你需要你的包装函数是 sync
,但仍然能够从内部 async
函数中检索结果,你可以使用回调:
saveRows(Function(dynamic) callback) {
handler.saveRows(plan.planId, plan.rows).then((result){
callback(result);
});
}
这样在调用函数后的任何时间点都可以检索结果(代码未 await
ed)