Firebase 云函数在 Flutter 中返回 null,因为它仍在运行

Posted

技术标签:

【中文标题】Firebase 云函数在 Flutter 中返回 null,因为它仍在运行【英文标题】:Firebase cloud function returns null in Flutter because it's still running 【发布时间】:2019-12-30 20:20:42 【问题描述】:

更新:我从我的 firebase 控制台中得到了这个:函数执行耗时 2906 毫秒,完成状态码:200 15 秒后,我得到:console.log 文档确实存在

我正在运行这个云存储功能。它“有效”,但我不断得到这个作为回报:FLUTTER:NULL

但是在 firebase 控制台中,我得到了 console.log,上面写着“DOC DOES EXIST”。

有什么办法可以解决这个问题?语言类型脚本

非常感谢!

  export const pubVer = functions.https.onCall((data, context) => 

      console.log(data.message);

      const kRef = admin.firestore().collection('Keys').doc(data.message)
      kRef.get()
        .then(doc => 
          if (!doc.exists) 
            console.log('No such document!');
            return returnMessage: 'FALSE'
           else 
            console.log('DOC DOES EXIST');
            return 'returnMessage: 'TRUE'
          
        )
        .catch(err => 
          console.log('Error getting document', err);
        );
      );

【问题讨论】:

【参考方案1】:

我建议使用可以帮助您调试的 async/await

export const pubVer = functions.https.onCall(async (data, context) => 
    const documentId = data.message;
    const kRef = admin.firestore().collection('Keys').doc(documentId);
    try 
        const doc = await kRef.get();
        if (!doc.exists)
            throw new Error('No such document!');
        return doc.data();
     catch (e) 
        console.log(e);
        return null;
    
);

【讨论】:

谢谢!返回 doc.data() 时,我试图在 firestore 中使用用户 ID 和邮件地址设置一个新文档。但是当我尝试实现它时:它说:“必须妥善处理承诺” @KarelDebedts 你能分享你的完整功能吗?【参考方案2】:

可调用函数必须返回一个promise,该promise 用要发送给客户端的数据进行解析。如图所示,该函数在顶层没有返回任何内容。从then 回调返回是不够的。你还需要返回then返回的promise:

export const pubVer = functions.https.onCall((data, context) => 

    console.log(data.message);

    const kRef = admin.firestore().collection('Keys').doc(data.message)
    return kRef.get()
        .then(doc => 
          if (!doc.exists) 
            console.log('No such document!');
            return returnMessage: 'FALSE'
           else 
            console.log('DOC DOES EXIST');
            return 'returnMessage: 'TRUE'
          
        )
        .catch(err => 
          console.log('Error getting document', err);
        );
);

【讨论】:

以上是关于Firebase 云函数在 Flutter 中返回 null,因为它仍在运行的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Firebase云函数打字稿

Flutter 函数使用 Firebase 返回空列表

Flutter Firebase Functions:调用函数时出错

如何通过云函数将图像存储在 Firebase 存储中

如何在 Flutter 中删除 Firebase 云消息传递令牌

使用 Flutter 测试 Firebase 云消息传递