Как я могу получить объект Map из Firebase в машинописи - PullRequest
0 голосов
/ 06 ноября 2019

Я пишу облачную функцию на TypeScript и пытаюсь получить объект Map - AKA (вложенные объекты, называемые картами) из firebase, чтобы я мог выполнять итерацию по нему.

Это структура в моемFirebase:

enter image description here

И я пытаюсь получить такие данные, как:

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)

Ничего из вышеперечисленного не даетмне карту, чтобы я мог использовать его ... или выйти из системы. Я получаю данные, но вижу только что-то вроде [object Object]

Что мне здесь не хватает, у меня не было проблем с получением массивов или простых объектов ...


1 Ответ

1 голос
/ 06 ноября 2019

Исходя из кода вашего вопроса, я предполагаю, что вы читаете свои данные в течение 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]);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...