2

我试图在prepare主通道的方法中加载一个对象,AutoRefreshingAuthClient然后加载一个FirestoreAPI对象,但我得到以下堆栈跟踪:

Unhandled exception:
Bad state: Future already completed
#0      _Completer.completeError (dart:async/future_impl.dart:21:31)
#1      ApplicationIsolateSupervisor._handleIsolateException (package:aqueduct/src/application/isolate_supervisor.dart:129:24)
#2      ApplicationIsolateSupervisor.listener (package:aqueduct/src/application/isolate_supervisor.dart:102:7)
#3      _RootZone.runUnaryGuarded (dart:async/zone.dart:1314:10)
#4      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:336:11)
#5      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:263:7)
#6      _SyncStreamController._sendData (dart:async/stream_controller.dart:764:19)
#7      _StreamController._add (dart:async/stream_controller.dart:640:7)#8      _StreamController.add (dart:async/stream_controller.dart:586:5)
#9      _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)

尽管此堆栈跟踪未指向我的代码中的任何内容,但我将问题隔离到clientViaServiceAccount该方法中的等待调用(下面的代码)prepare

我不确定我做错了什么,因为此 API ( googleapis ) 的文档在这种情况下基本上没有帮助,并且文档中显示的示例方法似乎在这里不起作用。

如何正确设置AutoRefreshingAuthClientandFirestoreAPI对象而不会出现此异常?

这是一个 Aqueduct 项目,如果我只是在创建时运行项目附带的示例代码,则运行没有问题。

我尝试将调用和初始化转移到不同的范围,但除此之外我不知道该尝试什么。

通道.dart

import 'dart:io';

import 'package:googleapis/firestore/v1.dart';
import 'package:googleapis_auth/auth.dart';
import 'package:googleapis_auth/auth_io.dart';

import 'package:mm_block/mm_block.dart';
import 'package:mm_block/controller/member.dart';

final _credentials = ServiceAccountCredentials.fromJson(
  File('credentials').readAsString()
);
final _scopes = [
  FirestoreApi.CloudPlatformScope
];

class MMBlockChannel extends ApplicationChannel {
  FirestoreApi firestore;

  @override
  Future prepare() async {
    // The issue is here.
    await clientViaServiceAccount(_credentials, _scopes)
      .then((client) => firestore = FirestoreApi(client));
  }

  ...
}

这一切都应该正确运行,我最终应该AutoRefreshingAuthClient会被传递给FirestoreAPI调用。

4

0 回答 0