Javascript 通过引用调用不起作用

标签 javascript

我读了this并尝试实现我的功能,以便数据不会变回,但它对我不起作用。

我有一个对象数组,我将它们一个一个地发送到另一个函数,以添加数据。

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

对于每一个sectionProjects,都有一个变量achievements,带有一个空数组。

在将每个 sectionProject 发送到 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;

这是调用查询的主要函数。首先:

// ...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]();
}           

最佳答案

阅读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)
            }
        });
    });

这不是问题。像这样改变它。 “upcomingTasks”不是回调函数。在一个Project中分配成就后执行

关于Javascript 通过引用调用不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36256817/

相关文章:

javascript - 按键事件在 Mozilla Firefox 中不起作用

php - 什么是 JavaScript 文件合适的内容类型 header ?

javascript - 使用 Javascript 中的正则表达式验证输入

javascript - 为什么我在 Angular JS 中使用解析时出现错误?

javascript - 取消React子组件中父组件的onClick事件

javascript - 读取 GridMVC 在 javascript 按钮单击中选择行

javascript - jQuery - 自动完成插件

javascript - windows.location.href 更改导致 POST,期望 GET

javascript - 通过GET请求只拉取对象的某些部分

javascript - 尝试使用 XMLHttpRequest() 将值从 jquery 传递到 php 文件