2014-02-28 120 views
0

由於數據庫本身是一個單獨的對象,調用它,我失去this如何使數據庫調用,而不會丟失?

var neo4j = require('neo4j'); 
var db = new neo4j.GraphDatabase('http://localhost:7474'); 

function MyObject(id){this.id = id} 
MyObject.prototype.myQuery = function(){ 
    db.query('Some Query',{args:params},function(callback){ 
     //this in here is some neo4j db related object. 
     //instead of MyObject 
     console.log(this.id); //undefined 
    }); 
} 
myObject = new MyObject(9); 
myObject.myQuery(); //undefined 

任何解決方法,以使數據庫調用,還有我的this從DB的回調裏面指的是原來預期的目標?在調用之前

回答

2

除了它保存到一個變量,你也可以如下所示結合this的功能:

MyObject.prototype.myQuery = function(){ 
    db.query('Some Query',{args:params},function(callback){ 
     //this in here is some neo4j db related object. 
     //instead of MyObject 
     console.log(this.id); //undefined 
    }.bind(this)); 
} 

...或者使用箭頭功能從ES6,儘管它還不是一個選項...

3

緩存它:

MyObject.prototype.myQuery = function(){ 
    var self = this; 
    db.query('QUERY',{args:params},function(callback){ 
     //If you use self here, it will work. 
     console.log(self.id); 
    }); 
} 
+0

願downvoter解釋什麼是錯的?會是對大家有用。保存該 –

+0

其他常見的名稱是'_this'和'that'。 –

0

在調用db.query方法之前,您可以保存this,如下所示:

MyObject.prototype.myQuery = function(){ 
    var thisQuery = this; 
    db.query('QUERY',{args:params},function(callback){ 
    // Now you can use thisQuery to refer to your query object 
    } 
} 
相關問題