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

时间:2019-08-26 16:04:13

标签: javascript firebase flutter google-cloud-functions

更新:我从Firebase控制台中获取了此信息:函数执行耗时2906 ms,状态码为200 15秒后,我得到:console.log文件确实存在

我正在运行此云Firestore功能。它“有效”,但我不断得到回报:FLUTTER:NULL

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

对此有什么解决方案?语言TYPESCRIPT

非常感谢您!

  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);
        });
      });

2 个答案:

答案 0 :(得分:0)

我建议使用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;
    }
});

答案 1 :(得分:0)

可调用函数必须返回一个承诺,该承诺将与数据一起解析以发送给客户端。如图所示,该函数未在顶层返回任何内容。从then回调返回还不够。您还需要返回then返回的承诺:

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);
        });
});