2012-02-03 67 views
2

開始玩節點,並且還是相當新的。我有下面的代碼,是否有可能從x我想要的地方返回「結果」?從回調結果中填充var?

function dbRequest(sql) { 
     var x; 
     var dbResults = client.query(sql,function(err,results,fields) { 
        if (err) { 
         throw err; 
        } 
         x = results; 
         client.end(); 
       }); 
       // I want x here to return what is in results. 
       return(x); 
} 

回答

0

不,至少不是你試過的方式。

很有可能,呼叫client.query()將啓動異步請求節點。這又意味着代碼執行將立即繼續,因此,在回調填充之前將返回值x

一個漂亮的方便易的方式來處理這種東西的,在其中您需要定義自己(如果你想要做某些事情,結果)

例如另一個回調方法傳遞:

function dbRequest(sql, cb) { 
    var dbResults = client.query(sql,function(err,results,fields) { 
       if (err) { 
        throw err; 
       } 
        if (typeof cb === 'function') { 
         cb(results); 
        } 

        client.end(); 
      }); 
} 

,然後調用它像

dbRequest('select * from foo', function(data) { 
    // do something with data 
});