为了账号安全,请及时绑定邮箱和手机立即绑定

flutter & firebase:写成功,有错误?

flutter & firebase:写成功,有错误?

千巷猫影 2022-08-27 15:08:50
我有一些看似非常奇怪的行为。我一直在关注有关将firebase集成到我的flutter应用程序中的多个教程。我正在尝试做一些非常简单的事情。当用户按下按钮时,将创建一个“会话”文档。我有这个 :index.jsconst functions = require('firebase-functions');const admin = require('firebase-admin');admin.initializeApp(functions.config().firebase);exports.addSession = functions.https.onCall((data, context) => {    const sessions = admin.firestore().collection('sessions');    return sessions.add({        game: data['game'],        rules: data['rules'],        password: data['password'],        roomCode: data['roomCode'],        playerIds: data['playerIds']    });});在Flutter中调用时,数据已成功写入数据库(我可以在控制台中看到它),但我也总是收到此错误:[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: PlatformException(functionsError, Firebase function failed with exception., {message: INTERNAL, code: INTERNAL})当我检查 Firebase 日志时,我看到以下内容:颤动调用:final HttpsCallable callable =        CloudFunctions.instance.getHttpsCallable(functionName: 'addSession');    await callable.call(<String, dynamic>{      'game': game,      'rules': 'default',      'password': password,      'roomCode': _roomCode,      'playerIds': [123456],    });对此非常困惑,结果似乎无关紧要。这是非常简单的代码!maximum stack call size exceeded还想知道这是否与我遇到的阅读问题有关,我将在另一篇文章中询问。
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

问题在于您从函数返回的内容。可调用函数将根据代码返回的内容生成对客户端的响应。该响应将序列化为 JSON。您的代码返回一个使用 DocumentReference 解析的 promise,并且 DocumentReference 不能很好地序列化,因为它包含循环引用。

相反,您应该做的是向客户端返回一些明确而简单的东西。例如:

exports.addSession = functions.https.onCall(async (data, context) => {
    const sessions = admin.firestore().collection('sessions');
    await sessions.add({
        game: data['game'],
        rules: data['rules'],
        password: data['password'],
        roomCode: data['roomCode'],
        playerIds: data['playerIds']
    });    return { result: "OK" }
});

当然,您可以返回任何您认为更有帮助的东西。请注意,我在JavaScript中使用了async/await synctax,以使其更容易。承诺就像飞镖中的未来一样工作。


查看完整回答
反对 回复 2022-08-27
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信