[英]Javascript function returning undefined value in nodejs
我正在編寫用於獲取數據的代碼。 首先,我調用**getsomedata**
函數來獲取數據,在getsomedata函數中,我調用另一個函數getRandomdata來獲取數據並將其返回到前一個函數,但它返回undefined
。 但是在getRandomdata
數據可以在console.log
看到。 我需要使用callbacks
嗎?
router.get('/get-data', function (req, res, next) {
var result = getsomedata(some_parameter);
console.log(result); // receiving undefined
res.send(result);
});
function getsomedata(some_parameter_recieved) {
var getsomedata = getRandomdata(random_params);
console.log(getsomedata); // receiving undefined
return getsomedata;
}
function getRandomdata(random_params_recieved) {
// after some calculation
console.log(random_data); // receiving proper data
return random_data;
}
您應該使用
callbacks
而不是return
,因為在asynchronous
操作中,return
不會等待I/O
操作完成。
Callback
- 在 JavaScript 中,高階函數可以作為函數中的參數傳遞。 由於 JavaSCRipt 是單線程的,一次只發生一個操作,每個將要發生的操作都在單線程中排隊。 這樣,傳遞的函數(作為參數)可以在父函數操作( async
)的其余部分完成時執行,腳本可以在等待結果的同時繼續執行。
通常這個callback
函數作為函數的最后一個參數傳入。
使用Callbacks
:
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); }
使用Promise
:
router.get('/get-data', function(req, res, next) { getsomedata(some_parameter, function(result) { console.log(result); res.send(result); }); }); function getsomedata(some_parameter_received, callback) { getRandomdata(random_params).then(function(random_data) { callback(random_data); }).catch(function(e) { //handle error here }); } function getRandomdata(random_params_received, callback) { return new Promise(function(resolve, reject) { // after some calculation if (RandomDataGeneratedSuccessfully) { resolve(random_data); } else { reject(reason); } }); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.