javascript - 从传递 JSON 的函数返回对象

标签 javascript function return

亲爱的,

我有一个函数,我可以向其中输入 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/

相关文章:

javascript - Angular JS 中的数组长度

javascript - 如何检查页面中的某个位置?

python - 将 math.erf 应用于数组

c - 外部初始化函数

javascript - 使用来自 ui-bootstrap 的 tabset 指令时,Angularjs Routing 行为异常

javascript - 如果没有任何内容可显示,隐藏 AJAX 附加吗?

c++ - "cast"指向 C++ 中函数指针的成员函数指针的最简单方法是什么?

javascript - 将多个变量传递给 Javascript 函数

java - jls。返回类型可替换。这是什么意思?

c++ - 从函数返回多维 vector 供main使用,如何正确使用?