亲爱的,
我有一个函数,我可以向其中输入 JSON 数据
function getTotals(users){
users = data;
allUsers = users.length;
active = 0;
women = 0;
men = 0;
lastActive = 0;
for (elm in users){
if (users[elm].active){
active++;
if (users[elm].gender == "Female"){
women++;
} else if (users[elm].gender == "Male") {
men++;
} else if (users[elm].last_login){
var lastLogin = new Date (users[elm].last_login);
var lastMonths = lastLogin.getMonth()-6;
var lastYears = lastLogin.getFullYear();
//console.log(lastYears);
if (lastMonths <6 && lastMonths > -6 && lastYears >= lastLogin.getFullYear()-1){
lastActive++;
}
}
}
}
return {allUsers : allUsers, active : active, women : women, men : men, lastActive : lastActive};}
但是当我执行以下操作时,我无法显示这些值:
var listOfUsers = document.createElement('p');
listOfUsers.textContent = "Liczba wszystkich użytkowników: "+allUsers;
document.querySelector("#row1 > div").appendChild(listOfUsers);
var listOfActive = document.createElement('p');
listOfActive.textContent = "Liczba aktywnych użytkowników: "+active;
document.querySelector("#row2 > div").appendChild(listOfActive);
var listOfWomen = document.createElement('p');
listOfWomen.textContent = "Liczba aktywnych kobiet: "+women;
document.querySelector("#row3 > div").appendChild(listOfWomen);
var listOfMen = document.createElement('p');
listOfMen.textContent = "Liczba aktywnych mężczyzn: "+men;
document.querySelector("#row4 > div").appendChild(listOfMen);
var listOfLastActv = document.createElement('p');
listOfLastActv.textContent = "Liczba aktywnych (ost 6 mcy): "+lastActive;
document.querySelector("#row5 > div").appendChild(listOfLastActv);
当我执行以下操作时(在其他问题中找到):
var getTotalUsers = new getTotal();
var allUsers = getTotalUsers.allUsers;
var active = getTotalUsers.active;
var women = getTotalUsers.women;
var men = getTotalUsers.men;
var lastActive = getTotalUsers.lastActive;
结果我得到了未定义的结果。我不知道如何解决这个问题,因为在 js 的下一部分中,我需要显示活跃用户列表。
最佳答案
new Promise()
异步返回结果。您可以链接 .then()
或使用 async/await
来获得预期结果
function httpGet() {
return new Promise(function(resolve) {
setTimeout(function() {
resolve([{a:1}, {b:2}, {c:3}])
}, Math.floor(Math.random() * 1200))
})
}
async function getTotals() {
const users = await httpGet();
console.log(users);
}
getTotals();
function httpGet() {
return new Promise(function(resolve) {
setTimeout(function() {
resolve([{a:1}, {b:2}, {c:3}])
}, Math.floor(Math.random() * 1200))
})
}
function getTotals() {
const data = httpGet();
data.then(function(users) {
console.log(users)
})
.catch(function(err) {
console.log(err)
})
}
getTotals();
关于javascript - 从传递 JSON 的函数返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45266315/