我是 Dart 的相对初学者,现在对于我的 Flutter 应用程序,我不确定如何正确地一次将多个主题订阅到 Firebase Cloud Messaging。我想在我的 Cloud Function 以特定时间间隔通过 FCM 向这些主题发送通知时收到通知。 FlutterFire 文档似乎说 subscribe/unsubscribeToTopic 方法返回期货,但 Dart 中解决多个期货的最佳方法是什么?到目前为止,我已经想到了以下 2 个选项:
方法一
Future<void> subscribeTopicV1(List<int> selectedUsers) async {
for (var userId in selectedUsers) {
await messaging.subscribeToTopic('$userId');
}
}
我的理解是,如果在父级中我调用 subscribeTopicV1 如下所示,这基本上会将所有订阅/取消订阅主题操作从异步变为同步:
...
if (shouldSubscribe) {
await subscribeTopicV1
}
...
// OR
if (shouldSubscribe) {
subscribeTopicV1.then( () => {
... // do whatever
})
}
这应该意味着在继续订阅下一个主题之前,我正在等待每个 messaging.subscribeToTopic 返回?
方法二
Future<void> subscribeTopicV2(List<int> selectedUsers) async {
Future.wait(selectedUsers
.map((userId) => messaging.subscribeToTopic('$userId')));
}
现在这第二种方法将并行运行所有 messaging.subscribeToTopic 操作,如果我以相同的方式调用 subscribeTopicV2 如下:
...
if (shouldSubscribe) {
await subscribeTopicV2
}
...
// OR
if (shouldSubscribe) {
subscribeTopicV2.then( () => {
... // do whatever
})
}
在这第二种方法中,我应该等待 subscribeTopicV2 中的所有期货都解决了吗?我想提一下,我不关心订阅主题的顺序,所以在这种情况下我应该使用方法 2 以获得最佳性能是否公平,因为它允许我并行执行这些异步操作?我找不到任何关于人们如何处理订阅多个主题的文档,因此非常感谢您提供任何见解!