2016-02-10 151 views
9

我正在編寫獲取數據的代碼。 第一我叫getsomedata函數來獲取數據和內部getsomedata功能我調用另一個函數getRandomdata獲取數據並返回回以前的功能,但它返回undefined。但在getRandomdata數據越來越。 某處談論使用回調。我是JavaScript新手。請幫忙。我的代碼看起來像是 。JavaScript函數返回節點js中未定義的值

router.get('/get-data', function(req, res, next) { 

    var result = getsomedata(some_parameter); 

    console.log(result); // recieving undefined 
    res.send(result); 
}); 

function getsomedata(some_parameter_recieved) { 

    var getsomedata = getRandomdata(random_params); 

    console.log (getsomedata); // recieving undefined 
    return getsomedata; 
} 

function getRandomdata(random_params_recieved) { 

    // after some calculation 
    console.log(random_data);   // recieving prpper data 
    return random_data; 
} 
+3

歡迎'asynchronous'編程!閱讀關於'callbacks'或'Promise'的信息 – Rayon

+0

您可能需要從'callback'返回值。試試這個http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ –

+0

可能的重複[如何從異步回調函數返回值?](http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function) – Gavriel

回答

20

相反的return,你應該使用callbacks因爲在asynchronous操作,return不等待I/O操作完成。

試試這個:

router.get('/get-data', function(req, res, next) { 
 
    getsomedata(some_parameter, function(result) { 
 
    console.log(result); 
 
    res.send(result); 
 
    }); 
 
}); 
 

 
function getsomedata(some_parameter_recieved, callback) { 
 
    getRandomdata(random_params, function(random_data) { 
 
    callback(random_data); 
 
    }); 
 
} 
 

 
function getRandomdata(random_params_recieved, callback) { 
 
    // after some calculation 
 
    callback(random_data); 
 
}

+1

非常感謝你.. :) – iam