2016-03-28 13 views
2

私はthisを読んで、データを元に戻すことはできませんが、それは私とは機能しません。Javascriptコールが参照できない

私は、データを追加するために、それらを別の関数に1つずつ送信するオブジェクトの配列を持っています。 sectionProjectsのそれぞれについて

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

、変数achievementsは、空の配列です。

the queries.first関数に各sectionProjectを送信すると、私は実績、

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:

// ...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

あなたの機能はokと思われます。あなたのコードをデバッグするために投稿する。より良い理解のために完全なコードを投稿してください。 – murli2308

答えて

1

読むThat回答倍:

var mysql = require("mysql"); 

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

module.exports = con; 

これはqueries.first呼び出す主な機能である。ここ

は、関数の。オブジェクトは、スカラープリミティブプロパティのラッパーとして機能します。オブジェクトを "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) 
      } 
     }); 
    }); 

のために、このObject reference issue

編集を参照してください。このように変更してください。 "upcomingTasks"はコールバック関数ではありません。 aProjectのアチーブメントを割り当てた後に実行します

+0

私は変数 'をドット'を使って変更しています。演算子は、 'Object reference issue'リンクに続き、最初のリンクにobj1を適用していますので、どうすればそれを見てください。 – Abu3odeh

+0

私はそれを変更しましたが、まだ変更されていません。 main関数からコードを追加します – Abu3odeh

関連する問題