2016-03-28 47 views
2

我讀this並嘗試實現我的功能,以便數據不會變回,但它不適用於我。引用Javascript調用不起作用

我有一個對象數組,我把它們一一發送給另一個函數來添加數據。

queries.first(finalObject.sectionProjects[i]); 

sectionProjects中的每一個,有一個可變achievements,用一個空數組。

在發送每sectionProject到the queries.first功能,我重新分配的成就,

finalObject.sectionProjects[i].achievements = something else 

當我從queries.first函數返回,我輸了,我添加的數據。 我做錯了什麼?

這裏的功能:

module.exports = { 
    first:function(aProject) { 

     // Latest achievements 
     var query = 
       " SELECT ta.description, ta.remarks, ta.expectedECD " + 
       " FROM project pr, task ta, milestone mi " + 
       " WHERE pr.ID = mi.project_ID AND mi.ID = ta.milestone_ID " + 
       " AND ta.achived = ta.percent AND pr.ID = " + aProject.project_id + 
       " ORDER BY pr.expectedECD " + 
       " LIMIT 5;" 
     ; 

     var stringified = null; 
     pmdb.getConnection(function(err, connection){ 
      connection.query(query, function(err, rows){ 
       if(err) { 
        throw err; 
       }else{ 
        var jsonRows = []; 
        for(var i in rows) {  
         stringified = JSON.stringify(rows[i]); 
         jsonRows.push(JSON.parse(stringified)); 
        }  
        connection.release();      

        aProject.achievements = jsonRows; 
        upcomingTasks(aProject); 
       } 
      }); 
     }); 
    } 
} 

這是pmdb.js:

var mysql = require("mysql"); 

var con = mysql.createPool({ 
    host: "localhost", 
    user: "user", 
    password: "password", 
    database: "database" 
}); 

module.exports = con; 

這是調用queries.first主要功能:

// ...Code... 
//Number of section projects 
var len = jsonRows.length; 
console.log("Number of section projects: " + len); 
var internal_counter = 0; 

function callbackFun(i){ 

    (finalObject.sectionProjects[i]).achievements = []; 

    queries.first(finalObject.sectionProjects[i]); 

    if(++internal_counter === len) { 
     response.json(finalObject); 
    } 
} 

var funcs = []; 

for (var i = 0; i < len; i++) { 
    funcs[i] = callbackFun.bind(this, i); 
} 

for (var j = 0; j < len; j++) { 
    funcs[j](); 
}   
+1

你需要分享'queries.first',它是如何實現的,它是一個異步的等等 –

+0

發佈你的函數分配成就。所以我可以調試。也讓小提琴 – murli2308

+0

你的功能似乎沒問題。小提琴調試你的代碼。或發佈完整的代碼以便更好地理解。 – murli2308

回答

1

That回答兩次。對象充當標量原始屬性的包裝。您正在將對象傳遞給「queries.first」函數。

見本Object reference issue

編輯的樣本代碼

pmdb.getConnection(function(err, connection){ 
     connection.query(query, function(err, rows){ 
      if(err) { 
       throw err; 
      }else{ 
       var jsonRows = []; 
       for(var i in rows) {  
        stringified = JSON.stringify(rows[i]); 
        jsonRows.push(JSON.parse(stringified)); 
       }  
       connection.release();      

       aProject.achievements = jsonRows; 
       upcomingTasks(aProject) 
      } 
     }); 
    }); 

這不是一個問題。像這樣改變它。 「comingTasks」不是回調函數。它是在一個項目中分配成果後執行

+0

我改變我的變量使用點'。'運算符,它遵循'對象引用問題'鏈接,並且我在第一個鏈接中應用了obj1,那麼你能告訴我我應該看到什麼嗎? – Abu3odeh

+0

我改變了它,但它仍然沒有改變。我將添加主函數中的代碼 – Abu3odeh