调用 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);
});
  }

这样在调用函数后的任何时间点都可以检索结果(代码未 awaited)