引用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]();
}
答
读That回答两次。对象充当标量原始属性的包装。您正在将对象传递给“queries.first”函数。
编辑的样本代码
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”不是回调函数。它是在一个项目中分配成果后执行
你需要分享'queries.first',它是如何实现的,它是一个异步的等等 –
发布你的函数分配成就。所以我可以调试。也让小提琴 – murli2308
你的功能似乎没问题。小提琴调试你的代码。或发布完整的代码以便更好地理解。 – murli2308