2017-07-23 21 views
0

逗人,從函數返回對象到JSON傳遞

我有一個函數,向其中I輸入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的下一部分中,我需要顯示活動用戶列表。

+0

凡'data'定義? – guest271314

+0

VAR數據;函數HTTPGET(URL){ 返回新無極(函數(解析,拒絕){ VAR httpReq =新的XMLHttpRequest(); httpReq.onreadystatechange =函數(){ 如果(httpReq.readyState == 4){ 如果(httpReq.status == 200){ 數據= JSON.parse(httpReq.responseText); 解析(數據); }否則{ 拒絕(新錯誤(http.Req.statusText)); } } }; httpReq.open( 「GET」,網址,TRUE); httpReq.send(); }) } – MaPta

+0

'new Promise()'異步返回結果。爲什麼你傳遞'users',然後將'users'重新定義爲'data'? – guest271314

回答

1

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();

+0

我確實有這在js文件結束getUserData() 。然後(getTotals) .catch(manageError);我也評論過部分用戶=數據在函數中,它仍然有效,但我不能從函數返回obj - 仍然我得到undefined – MaPta

+0

然後'用戶=數據'是沒有必要的。你爲什麼要調用'new getTotal()'?什麼是'getTotal()'?爲什麼期望從異步函數調用中獲得同步結果? – guest271314

+0

getTotals - 我計算和顯示用戶數據的函數 – MaPta