9

Я пишу код для получения данных. первым я называю getsomedata функцию, чтобы получить данные и внутри getsomedata функции Я зову другую функцию getRandomdata, чтобы получить данные и вернуть его обратно к предыдущей функции, но она возвращается неопределенной. но в 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-a-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