引用Javascript调用不起作用

问题描述:

我读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

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