Typescript 并非所有代码路径都返回值(对于可调用的google cloud函数)

Typescript 并非所有代码路径都返回值(对于可调用的google cloud函数),typescript,google-cloud-firestore,google-cloud-functions,callable,Typescript,Google Cloud Firestore,Google Cloud Functions,Callable,我有一个云函数,当我使用一些异步函数并在每个可能的输出中输入一个“return”时,并不是所有的代码路径都返回一个值 我尝试过删除我的数据库调用,只需要返回{data:{…};'这使得错误消失了 我还尝试将所有内容包装在“try”“catch”块中 我现在有我期望的工作,就是两个块get(),然后()…catch() 我希望能够使用firebase deploy部署我的云功能,但我得到的却是部署错误: src/index.ts:83:62 - error TS7030: Not all cod

我有一个云函数,当我使用一些异步函数并在每个可能的输出中输入一个“return”时,并不是所有的代码路径都返回一个值

我尝试过删除我的数据库调用,只需要返回{data:{…};'这使得错误消失了

我还尝试将所有内容包装在“try”“catch”块中

我现在有我期望的工作,就是两个块get(),然后()…catch()

我希望能够使用firebase deploy部署我的云功能,但我得到的却是部署错误:


src/index.ts:83:62 - error TS7030: Not all code paths return a value.

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

注意 我想我已经发现,当我在可调用的签名中添加“async”时,“firestore部署”可以工作,但是“警告/错误”仍然保留在Microsoft Studio代码中(并非所有代码路径都返回值.ts(7030))


export const getUsersInThisChatRoom=functions.https.onCall(async(数据,上下文)=>

使用callables,您可以直接返回要序列化并发送到客户端的对象,也可以返回与要发送的对象解析的承诺。您只需在
中返回承诺,否则如果
块:

    // note the return added to the next line
    return db.collection(`InHere/${my_uid}`).get().then(snapshot => 
    {
        return {data:{}, success:true};
    }).catch(e =>
    {
        return {data:{message:"No last message yet...", success:false}};
    });
这将返回解析为您从
then
catch
回调返回的值的承诺


你没有义务使用async/await,但是如果你这样做,你应该用正确的async/await语法完全替换then和catch块。它看起来会非常不同。

hi,不。去掉最后一个else可以不返回任何内容。我得到:src/index.ts:83:63-错误TS7030:并非所有代码路径都返回值。我注意到I c通过在函数签名onCall中添加async进行部署,尽管我仍然看到一个警告,如果
分支没有返回任何内容,那么您的
else将被警告。这些返回语句从调用
然后
catch
时声明的内部函数返回。啊,我明白了,我想我需要使用'wait',然后,因为它在onCall中出现时没有返回I don’我没有给出使用“回调”/“完成块”的可能性?是的,我认为这样做很有效。如果你想发布,我会接受这个答案
    // note the return added to the next line
    return db.collection(`InHere/${my_uid}`).get().then(snapshot => 
    {
        return {data:{}, success:true};
    }).catch(e =>
    {
        return {data:{message:"No last message yet...", success:false}};
    });