9

Tôi đang viết mã để nhận dữ liệu. đầu tiên tôi gọi getsomedata chức năng để có được dữ liệu và bên getsomedata chức năng tôi kêu gọi một chức năng getRandomdata để lấy dữ liệu và gửi lại nó trở lại chức năng trước đó nhưng nó đang trở lại không xác định. nhưng trong dữ liệu getRandomdata đang nhận được. một nơi nào đó nói về việc sử dụng gọi lại. tôi mới vào javascript. Hãy giúp tôi. mã của tôi trông giống như thế.Hàm Javascript trả về giá trị không xác định trong nút 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

Chào mừng bạn đến 'lập trình asynchronous'! Đọc về 'callbacks' hoặc' Promise' – Rayon

+0

Bạn có thể cần phải trả về giá trị từ 'callback'. Thử http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ –

+0

Sao chép có thể có của [Cách trả về giá trị từ hàm gọi lại không đồng bộ?] (Http://stackoverflow.com/questions/6847697/how-to-return-value-from-an-không đồng bộ-gọi lại-chức năng) – Gavriel

Trả lời

20

Thay vì return, bạn nên sử dụng callbacks bởi vì trong asynchronous hoạt động, return không chờ đợi cho sự vận hành I/O để hoàn thành.

Hãy thử điều này:

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

Cảm ơn bạn rất nhiều .. :) – iam

Các vấn đề liên quan