我试图在函数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())
// })
// }
}
答案 0 :(得分:0)
出于多种原因,这种时髦的代码可以修改函数内部的全局对象。尤其是因为该函数称为“ getBetList”,但是它什么也没得到,它只是在其他地方更新了变量。做这样的事情更干净
const bettingPool = await getBetList()
让getBetList返回betList。
这也应该解决您的问题。