我无法让我的地图打印是函数之外的值



我正在尝试访问函数getbetlist之外的映射值,就像在该函数之外做一个控制台.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())
//     })
// }

}

出于多种原因,修改函数内的全局对象是一种时髦的代码。特别是因为该函数称为"getBetList",但它没有得到任何东西,它只是在其他地方更新一个变量。做这样的事情要干净得多

const bettingPool = await getBetList()

并让getBetList返回betList。

这也应该可以解决您的问题。

最新更新