如何在打字稿中从 firebase 获取 Map 对象

5er*_*5er 1 firebase typescript google-cloud-platform google-cloud-functions google-cloud-firestore

我正在 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)
Run Code Online (Sandbox Code Playgroud)

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

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


Ren*_*nec 5

根据您问题中的代码,我假设您在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);
});
Run Code Online (Sandbox Code Playgroud)

如果您想“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]);
});
Run Code Online (Sandbox Code Playgroud)