我无法打印地图是功能之外的价值

时间:2019-04-19 19:08:21

标签: javascript node.js firebase

我试图在函数getbetlist之外访问映射的值,就像在该函数外部进行console.log(bettingPool)一样,但是只要执行此操作,它就只会打印{}。但是,在函数getbetlist中,它会打印正确的输出。

我尝试过更改变量类型,设置变量,创建新变量并将其重置,但到目前为止没有任何效果。

var db = firebase.firestore();
var bettingPool = {}
var marketSplit = {}
var weightedMarketSplit = {}
var msToNextDay = 0;
var test;

async function startNewGame() {
await getBetList();
var now = new Date();

var nextDay = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate() + 1,
    7, 59, 59
);
test();
msToNextDay = nextDay.getTime() - now.getTime();
// console.log(msToNextDay)
// bettingPool = {}
// marketSplit = {}
// weightedMarketSplit = {}
// setTimeout(startNewGame(), msToNextDay);
}
startNewGame();



async function getBetList() {
console.log("inside getBetList")
const users = []
const accuracy = []
db.collection('Bets').get().then(
    function (querySnapshot) {
        querySnapshot.forEach(
            function (doc) {
                doc.data().userDoc.onSnapshot(docSnapshot => {

                    /* Betting Pool Split
                            bettingPool - By Money
                            marketSplit - By Users
                            weightedMarketSplit - By users * accuracy
                    */
                    if (!bettingPool[doc.data()['stockId']]) {
                        bettingPool[doc.data()['stockId']] = {}
                        marketSplit[doc.data()['stockId']] = {}
                        weightedMarketSplit[doc.data()['stockId']] = {}
                    }
                    if (doc.data()['direction'] == 'Up') {
                        if (!bettingPool[doc.data()['stockId']].Up) {
                            bettingPool[doc.data()['stockId']].Up = 0.0
                            marketSplit[doc.data()['stockId']].Up = 0
                            weightedMarketSplit[doc.data()['stockId']].Up = 0.0
                        }
                        marketSplit[doc.data()['stockId']].Up += 1
                        bettingPool[doc.data()['stockId']].Up += Number(doc.data()['bet'])
                        weightedMarketSplit[doc.data()['stockId']].Up += (docSnapshot.data()['accuracy'])
                    }
                    else if (doc.data()['direction'] == 'Down') {
                        if (!bettingPool[doc.data()['stockId']].Down) {
                            bettingPool[doc.data()['stockId']].Down = 0.0
                            marketSplit[doc.data()['stockId']].Down = 0
                            weightedMarketSplit[doc.data()['stockId']].Down = 0.0
                        }
                        marketSplit[doc.data()['stockId']].Down += 1
                        bettingPool[doc.data()['stockId']].Down += Number(doc.data()['bet'])
                        weightedMarketSplit[doc.data()['stockId']].Down += (docSnapshot.data()['accuracy'])
                    }
                    test = bettingPool;
                })
            }
        )
    }
)

// for (var user of users) {
//     db.collection("Users").doc('' + user).onSnapshot(querySnapshot => {
//         // if(querySnapshot.data()['accuracy']) {
//         //     accuracy.push(querySnapshot.data()['accuracy'])
//         // }
//         // else {
//         //     accuracy.push(0.5);
//         // }
//         // console.log(querySnapshot.data())
//     })
// }

}

1 个答案:

答案 0 :(得分:0)

出于多种原因,这种时髦的代码可以修改函数内部的全局对象。尤其是因为该函数称为“ getBetList”,但是它什么也没得到,它只是在其他地方更新了变量。做这样的事情更干净

const bettingPool = await getBetList()

让getBetList返回betList。

这也应该解决您的问题。