簡體   English   中英

Javascript函數在nodejs中返回未定義的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM