2012-08-30 73 views
1

節點的memcached有一個功能get檢索e.g memcachd鍵值:如何從node-memcached獲取函數返回結果?

memcached.get("hello",function(err, result){ 
if(err) console.error(err); 
this.r = result; 
console.dir(result); 
memcached.end();}); 

函數中的第二個參數是回調函數
回調函數,我可以輕鬆登錄我的鍵值內。
我試圖分配一個屬性rmemcached當我嘗試登錄memcached.r外部get功能undefined結果發生。
我的代碼有什麼問題?

回答

0

雖然this看起來像一個變量,並且往往表現得像一個,但它不是一個真正的變量,因此在閉包中不像一個變量。當你有嵌套在另外一個功能,內在功能獲得的this一個全新的版本,這是不太可能指向同樣的事情外部函數的this

因此,如果您需要參考的外部函數的this內部函數裏面,你必須首先將其複製到一個真正的變量(大多數人喜歡叫它self但有些人更喜歡that),然後是指該變量在內部功能。

在你的情況,但是,你已經有了一個真正的變量,即memcached,可以分配到,所以只是在回調memcached更換this。它是由回調創建的閉包的一個正確範圍的外部變量(如可以在其中使用memcached.end()的事實可以看出)。

[更新,包括你的代碼格式正確的版本在評論中提及]

memcached.get = function get(key, callback) { 
    if (Array.isArray(key)) return this.getMulti.apply(this, arguments); 
    this.command(function getCommand (noreply) { 
    return { key: key , callback: callback , 
     validate: [['key', String], ['callback', Function]] , 
     type: 'get' , command: 'get ' + key }; 
    }); 
}; 

它看起來像你想異步調用多種功能,並期待return從它們的值。這根本行不通。

+0

好吧,我使用初始化連接首先在'initial.js'調用'require'函數文件到該文件使用var'INIT',我嘗試'INIT.mem​​cached.r = result'在內部功能和呼叫它外面,但沒有工作太 –

+1

我不太清楚你在說什麼,雖然這可能只是一個差的翻譯問題。如果你能找到熟練掌握英語和母語的人,並且懂得編程,就可以嘗試運行他/她所說的話,並張貼他們必須說的話。 – ebohlman

+0

對我可憐的郎很抱歉,但我會更清楚。在第一memcached的節點應該連接到memcached服務器然後做查詢。什麼我所做的就是寫連接代碼在一個名爲'initial.js'然後創建一個名爲文件'test.js'在這個文件我用'INIT =要求(「初始」)'使用使用'INIT.mem​​cached.get'其正常工作,如果我登錄回調函數內的結果,但是當我嘗試分配「通話result'參數後面的關鍵我memcahed連接和查詢函數調用'INIT.mem​​cached.r',然後將其記錄到'get'函數'undefined'結果之外。 –