9

Piszę kod do pobierania danych. pierwszy zgłoszę getsomedata funkcję, aby uzyskać dane i wewnątrz getsomedata funkcji Wołam inną funkcję getRandomdata aby uzyskać dane i wraca z powrotem do poprzedniej funkcji, ale jest zwrócenie niezdefiniowane. ale w getRandomdata gromadzone są dane. gdzieś mówi o użyciu callbacków. Jestem nowy w javascript. proszę pomóż. mój kod wygląda.Funkcja JavaScript zwracająca niezdefiniowaną wartość w węźle 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

Witamy 'programowania asynchronous'! Przeczytaj o 'callbacks' lub' Promise' – Rayon

+0

Prawdopodobnie musisz zwrócić wartości z 'callback'. Wypróbuj http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ –

+0

Możliwy duplikat [Jak zwrócić wartość z asynchronicznej funkcji wywołania zwrotnego?] (Http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-asynchronous-callback-function) – Gavriel

Odpowiedz

20

Zamiast return, należy użyć callbacks ponieważ w asynchronous operacji return nie czeka operacja I/O aby zakończyć.

Spróbuj tego:

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

Dziękuję bardzo .. :) – iam

Powiązane problemy