【问题标题】:How do I get Map object from firebase in typescript如何从 typescript 中的 firebase 获取 Map 对象
【发布时间】:2020-03-03 09:28:13
【问题描述】:

我正在使用 TypeScript 编写云函数,并尝试从 firebase 获取 Map 对象 - AKA(嵌套对象,称为地图),以便能够遍历它。

这是我的 Firebase 中的结构:

我正在尝试获取如下数据:

const tokenSettingsRef = db.collection('tokenSettings').doc('spread')
transaction.get(tokenSettingsRef).then((tokenSettingsDocSnapshot) => {


                            const tokenData = tokenSettingsDocSnapshot.data()
                            if (typeof tokenData !== 'undefined') {
                                console.log("tokennne3: " + tokenData.tokens[0])
                                console.log("tokennne4: " + tokenData)
                                console.log("tokennne5: " + tokenData.tokens)
                                console.log("tokennne1: " + tokenData.tokens.length())
                                console.log("tokennne2: " + tokenData.tokens.keys())
                                const variations = new Map(Object.entries(tokenData.tokens));
                                console.log("tokennne5: " + variations.keys)
                                console.log("tokennne6: " + variations.values)

以上都没有给我地图,所以我可以使用它...或者注销它。 我正在获取数据,但我能看到的只是 smtg,例如 [object Object]

我在这里缺少什么,我在获取数组或普通对象方面没有任何问题......


【问题讨论】:

    标签: typescript firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    根据您问题中的代码,我假设您在 transaction 中读取数据。

    以下应该有效:

    var tokenSettingsRef = db.collection('tokenSettings').doc('spread');
    
    db.runTransaction(transaction => {
        return transaction.get(tokenSettingsRef).then(tokenSettingsDocSnapshot => {
    
            if (!tokenSettingsDocSnapshot.exists) {
                throw "Document does not exist!";
            }
    
            var tokensMap = tokenSettingsDocSnapshot.data().tokens;
            //Let's print all the keys and values of the tokens map
            Object.keys(tokens).forEach(e =>
              console.log(`key=${e}  value=${tokens[e]}`)
            );
            //...... Continue the transaction
        });
    }).then(function() {
        //....
    })
    .catch(error => {
        console.log('Transaction failed: ', error);
    });
    

    如果您想“从其中取出 Map<number, number> 对象”,正如您在下面的评论中所要求的,您可以执行以下操作:

    var tokensMap = tokenSettingsDocSnapshot.data().tokens;
    
      const transformedTokensMap = new Map<number, number>();
      Object.keys(tokensMap).forEach(e => {
          transformedTokensMap.set(Number(e), tokensMap[e]);
    });
    

    【讨论】:

    • 这行得通,谢谢。请问如何从中取出 Map 对象?
    • 查看文档“从交易中传递信息”的特定部分:firebase.google.com/docs/firestore/manage-data/…
    • 我不想在事务之外传递它我想在地图中使用值来生成文档。我有一个接受 Map 的函数,我想将 tokensMap 作为 Map 传递给该函数。
    • 您对如何做到这一点有什么建议吗?从中获取 Map 对象?谢谢
    • 我是这样做的,但我希望有一个easier 的方式来做到这一点......非常非常感谢......
    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 2016-11-10
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多