从Firebase DB查询将类型转换返回为可迭代类型

时间:2019-03-30 02:35:31

标签: node.js typescript firebase google-cloud-firestore google-cloud-functions

我要做什么

我目前正在为数据库设置Firebase Functions,为此,我正在使用TypeScript。 我正在尝试从数据库中获取一个节点。该节点是一个Map(即String的Map,Java中的bool)。问题是,从数据库中获取节点“ test”后,我试图遍历其成员,但出现错误

错误

  

TypeError:议程。forEach不是函数

     

at Object。 (\ firecast \ functions \ lib \ index.js:32:16)

     

在Generator.next()

     

已实现(\ firecast \ functions \ lib \ index.js:4:58)

     

在process._tickCallback(内部/process/next_tick.js:68:7)

我的设置

这是我设置数据库的方式:(抱歉,idk为什么图像嵌入无法正常工作,我将放置链接)

链接到图像:https://pasteboard.co/I7KogY2.png

这是我的完整功能:

export const getTest=
functions.https.onRequest(async (request,response)=>{
    try{
        const GlobalCalendar= await admin.firestore().doc("Calendar/GlobalCalendar").get()
        const agenda=GlobalCalendar.data()!.test
        const hours: any[]=[] 
        agenda.forEach((weekday: any) => {
            hours.push(weekday)
        }); 
        response.send(agenda);
    }
    catch(error){
        console.log(error)
        response.status(500).send(error)
    }
})

我尝试修复此问题

如果我注释掉

  

//常数小时:any [] = []

     

// schedule.forEach((工作日:任意)=> {

     

// hours.push(工作日)

     

//});

它将成功发送地图“议程”,我得到以下信息:

  

{      “四个”:是的,      “一个”:是的,      “三”:是的,      “两个”:正确   }

结论

所以我知道我从数据库中正确获取了节点“ test”,但是问题是遍历此对象。似乎无论“议程”的类型是什么,它都没有“ forEach”功能。我按照Firebase youtube视频中的说明进行了操作,但是他们做了相同的工作,但与我的不同,他们的工作非常完美。

链接到视频:https://www.youtube.com/watch?v=Jr7pDZ1RAUg&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=6

我的预期结果是能够遍历变量“ agenda”中的元素,该变量是图像中我的节点“ test”。

非常感谢您的时间!

1 个答案:

答案 0 :(得分:0)

数据库中的字段test是一个对象,而不是数组。您无法使用forEach迭代对象-它不会具有该方法或任何迭代器方法。如果要迭代对象的键和值,请try one of these options