2016-09-26 487 views
-1

我是很新的節點JS,我用下面的鏈接節點JS在Postgres數據庫連接:節點JS - 數據庫調用異步?

How to make connection to Postgres via Node.js

當節點控制檯運行下面的代碼獲取從DB(Postgres的)一些結果

var query_str = "SELECT name FROM city" ; 
var pg = require('pg'); 
var conString = "postgres://postgres:[email protected]:5432/cfg"; 
var client = new pg.Client(conString); 
client.connect(); 
var query = client.query(query_str); 
console.log(query); 

但是,當我把上面的代碼中的功能是這樣,使一個函數調用

function getname() 
{ 
    var query_str = "SELECT name FROM city" ; 
    var pg = require('pg'); 
    var conString = "postgres://postgres:[email protected]:5432/cfg"; 
    var client = new pg.Client(conString); 
    client.connect(); 
    var query = client.query(query_str); 
    console.log(query); 
    return query; 
} 

它返回一個空對象。是否因爲代碼是異步的?如果是的話,我該如何解決這個問題。

任何人都可以幫助我解決這個問題。或者如何進一步進行。謝謝。

回答

1

client.query是異步的,你的函數應該期待一個callback功能或者它應該返回一個Promise

function getname(cb) { 
 
    var query_str = "SELECT name FROM city"; 
 
    var pg = require('pg'); 
 
    var conString = "postgres://postgres:[email protected]:5432/cfg"; 
 
    var client = new pg.Client(conString); 
 
    client.connect(function(err) { 
 
    if (err) cb(err); 
 
    client.query(query_str, function(err, result) { 
 
     if (err) cb(err); 
 
     cb(null, result); 
 
     client.end(function(err) { 
 
     if (err) cb(err); 
 
     }); 
 
    }); 
 
    }); 
 
} 
 

 
getname(function(error, data) { 
 
    if (error) { 
 
    console.log(error); 
 
    } else { 
 
    console.log(data); 
 
    } 
 
});