2013-12-23 149 views
-1

我是新來的NodeJS,我寫了這樣的功能:我可以等待完成的異步步驟,然後返回?

function getResult(){ 
    var result=''; 
    //do something asynchronous,like query datebase and assign result 
    db.query(sql,function(err,res){ 
     if(err) throw err; 
     result=res; 
    }) 
    return result; 
} 

我運行它

getResult(); 

,但我不能得到結果。它似乎是異步步驟之前的函數返回。

我可以等待完成的異步步驟,然後讓該函數返回?怎麼樣? 感謝..

+0

研究的回調... – Jakub

+0

你不能等待異步命令完成。你只能訂閱他們的完成。一個好的寫了使用Ajax的例子是「[如何返回從AJAX調用的響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an -ajax呼叫)」但是,你要定義'的getResult()'要麼接受被稱爲自己的'callback'或返回有點像'Promise'時'res'是可用的就可以解決。 –

回答

0

這是一個簡單的問題,但它包含在node.js中的一個重要概念讓我們來看看這個: 代碼:

function getResult(){ 
    var result=''; 
    //do something asynchronous,like query datebase and assign result 
    db.query(sql,function(err,res){ 
     if(err) throw err; 
     result=res; 
    }) 
    return result; 
    } 

運行是這樣的:首先,做

db.query (sql) 

然後,它可以直接做

return result 

。 因爲當查詢操作完成後,它會做

function(err, res){ ...} 

所以,你可以得到你想要的,可能不是答案。 如何解決這個問題?你可以使用像這樣的回調:

function getResult(callback){ 
    db.query (sql, function(err, res){ 
    if (err) throw err; 
    callback res; 
    }); 
} 

getResult(function(result){ 'do something you like with result' }); 

它可以幫助你!

0

利用回調。這是javascript的核心概念之一。

function getResult(callback){ 
    var result=''; 
    //do something asynchronous,like query datebase and assign result 
    db.query(sql,function(err,res){ 
     if(err) throw err; 
     callback(res); 
    }) 
} 

使用該功能

getResult(function(res){ 
// do something 
});