【问题标题】:Firebase.initializeApp() -- How do I know that this requires an await async functionality?Firebase.initializeApp() - 我怎么知道这需要等待异步功能?
【发布时间】:2021-06-28 12:19:34
【问题描述】:

此代码来自:https://blog.logrocket.com/flutter-push-notifications-with-firebase-cloud-messaging/

void registerNotification() async {
  // 1. Initialize the Firebase app
  await Firebase.initializeApp();

  // 2. Instantiate Firebase Messaging
  _messaging = FirebaseMessaging.instance;

  .......
}

这里对于Firebase.initializeApp(),他们使用了等待和异步。
我怎么知道这个函数需要 await 才能正常工作?

文档在这里:https://firebase.google.com/docs/reference/node/firebase#initializeapp
我没有在文档中看到任何关于 await 的特别提及。

【问题讨论】:

  • 使用 Futures 时,async/await 是您可以使用的一种选择,具体取决于您可以选择使用它的情况。查看here上的答案了解更多详情。

标签: firebase flutter


【解决方案1】:

这是initializeApp() 的实现,您可以在documentation from firebase_core 中找到:

static Future<FirebaseApp> initializeApp({
  String? name,
  FirebaseOptions? options,
}) async {
  FirebaseAppPlatform app = await _delegate.initializeApp(
    name: name,
    options: options,
  );

  return FirebaseApp._(app);
}

如您所见,返回类型是Future&lt;FirebaseApp&gt;,这意味着它是一个异步方法,您应该使用关键字await 来确保在继续执行代码之前完成您的操作。 您可能已经知道await 只能在async 方法中使用。

【讨论】:

    【解决方案2】:

    您指出的文档适用于 Node.js,here's 是 Fl​​utterFire 的“入门”文档的链接。上面写着:

    要初始化 FlutterFire,请调用 Firebase 类的 initializeApp 方法:

    await Firebase.initializeApp();

    该方法是异步的并返回一个Future,因此您需要在显示您的主应用程序之前确保它已经完成。

    “初始化”函数通常是 Futures,因此应该等待。您可以通过查看函数的返回类型来检查这一点,该类型记录在 here 中。

    【讨论】:

      【解决方案3】:

      您可以在函数内部单击以查看幕后情况 例如,我点击了它,这是结果

      所以它返回 FirebaseApp 的 Future,这是异步和等待获取 Future 内部的值所必需的

      【讨论】:

        猜你喜欢
        • 2012-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        相关资源
        最近更新 更多