在VAR

2016-09-29 59 views
0

我有下面的代碼存儲數據庫屬性:在VAR

var sqlite3 = require('sqlite3').verbose(); 
var db = new sqlite3.Database('test.db'); 

db.serialize(function() { 
    db.run("CREATE TABLE IF NOT EXISTS counts (key TEXT, value INTEGER)"); 
    db.run("INSERT INTO counts (key, value) VALUES (?, ?)", "counter", 0); 
}); 


var getValue = function(res){ 
    db.get("SELECT value FROM counts", function(err, row){ 
     res.json({ "count" : row.value }); 
     return; 
    }); 
}; 

console.log(getValue); 

輸出是

[Function] 

但應該是JSON。我究竟做錯了什麼? 我接過例如,從http://dalelane.co.uk/blog/?p=3152

感謝提前:)

+0

難道我的帖子下面的回答你的問題?如果不是那麼請評論,所以我會盡力澄清。 – rsp

+0

哦,是的,它確實回答了我的問題。我還沒有掌握它,但我會到達那裏。我用python解決了這個問題(這是一個練習),並計劃在我超出截止日期之前閱讀更多內容;-) – Porridge

回答

0

當然getValue是一個功能,因爲你前幾行寫道:

var getValue = function(res){ 
    // ... 
}; 

所以現在,當你寫:

console.log(getValue); 

它會告訴你,這是一個功能。

你可能想要的是:

getValue({json: console.log}); 

或可能:

getValue({json: data => console.log(data.count)}); 

,如果你想顯示從傳遞給res.json的對象值,如果你有一個db.get()功能以該格式返回一行 - 確保首先正確使用它。但請記住,這是異步的,因此您無法立即將其存儲在變量中。

簡化您的例子一點點,你可以這樣做:

asyncFunc('args', function (err, data) { 
    if (err) { 
    console.log('Error:', err); 
    } else { 
    console.log('Value:', data); 
    } 
}); 

,但你將無法返回值,因爲返回一個簡單的值是一個同步的過程。你可以返回一個承諾:

function getPromise() { 
    return new Promise(function (resolve, reject) { 
    asyncFunc('args', function (err, data) { 
     if (err) { 
     reject(err); 
     } else { 
     resolve(data); 
     } 
    }); 
    }); 
} 

,你就可以使用這樣的:

getPromise() 
    .then(value => console.log('Value:', value)) 
    .catch(error => console.log('Error:', error)); 

如果你不知道這是爲什麼,那麼你可以看到一些其他的答案,我解釋如何擺脫異步函數調用數據,可能對您有用:

0

你沒有呼叫的getValue函數。像這樣調用它:getValue()。但是該函數返回null。

您將需要從一個更基本的例子開始。首先了解函數調用,然後當你有這種情況下,移動到其他的東西。