2012-04-20 40 views
1

所以說,我有一個功能:如何讓一個變量進行inline函數

function grabOldestJob() { 
    var client = mysql.createClient({ 
    user: dbConfig['USER'], 
    password: dbConfig['PASS'], 
    }); 

    client.query('USE '+dbConfig['DATABASE']); 

    client.query('SELECT url FROM '+dbConfig['JOB_TABLE']+' ORDER BY added ASC LIMIT 1 ', 
    function selectCb(err, results, fields, passed) { 
     if (err) { 
     throw err; 
     } 
     client.end(); 
     fetchFeed(results[0]['url']); 
    } 
); 
} 

我需要的是結果[0] [「網址」]埋在inline函數,所以或者我想從該函數中獲取該變量,以便我可以使用它返回grabOldestJob函數或將另一個函數傳遞給內聯函數,以便我可以使用results [0] ['url']作爲參數。

我對node.js的概念很陌生,希望儘可能使我的代碼「正確」。這個函數是一個進程中的第一個函數,它將一個url從數據庫中提取出來,並將其傳遞給遠程服務器,xml提要被解析並將某些位存儲在數據庫中。我希望使用節點「一次運行很多事情」的能力,我將能夠同時獲取 - >解析 - >保存多個提要。任何最佳實踐技巧也將不勝感激。

回答

1

對此使用回調函數。

client.query(query,callback)功能一樣。如果處理完成,則傳入數據和回調函數。對您的fetchFeed(url,callback)功能也一樣。

... 
client.end(); 
fetchFeed(results[0]['url'],function(result){ 
    // here 'result' contains the fetched feed and can be stored into the database 
}); 
... 

function fetchFeed(url,cb){ 
    // download feed here and call cb(downloaded_data) when finished, passing the downloaded data to the cb() function 
} 

看一看:Understanding the node.js event loop

+0

謝謝,非常清楚。明天我會放棄這一點! – wjdp 2012-04-20 01:59:18

+0

好的,祝你好運!歡迎來到Stack Overflow! – stewe 2012-04-20 02:04:52

0

在外部作用域中定義的每個變量都在外部作用域的內部作用域中可見。這基本上意味着當你在一個帶有關鍵字'var'的函數中定義變量時,任何嵌套函數都會看到它。另一方面,當你定義一個沒有'var'關鍵字的變量時,它將在全局範圍內可見。這裏有一個例子:

(function() { 
    var v = 5; 

    (function() { 
    v = 3; 
    })(); 

    console.log(v); 
})(); 

這將打印出。所以如果你想要一個參數在內部函數之外是可見的,你必須複製它(不確定引用的變量是否可能會被垃圾回收?)到一個全局變量中。像這樣

(function() { 
    var v = 5; 

    (function (n) { 
    v = n; 
    })(42); 

    console.log(v); 
})(); 

,這將打印出。

相關問題