2015-08-06 2 views
1

Я не могу окунуться в обратные вызовы. Вот простой пример, чтобы показать, о чем я смущен. Обратный вызов printData необходимо вызывать после возврата getData.Как выполнить обратный вызов после того, как функция вернулась

function data(cb) { 

    var myData = getData(); 
    cb(myData); 
} 

function printData(data) { 

    console.log("printing " + data) 
} 

function getData() { 

    console.log("getting data"); 

    setTimeout(function(){ 
     console.log("finishing data"); 
     return "this is the data" 
    }), 3000; 
} 

data(printData); 

//OUTPUT 

//getting data 
//printing undefined 
//finishing data 

JSFIDDLE

+2

'getData' действительно возвращается немедленно. «Возврат» в обратном вызове 'setTimeout' бесполезен. 'getData' должен также выполнить обратный вызов. – Bergi

+0

Взгляните на это: http://stackoverflow.com/a/5520190/185672 – Phil

+0

Зачем вам нужен обратный звонок? Кажется, это не совсем полезно в вашем коде. – alcfeoh

ответ

3

Вы можете обновить вашу функцию к следующему

function data(cb) { 

    getData(cb); // pass the callback function 

} 

function printData(data) { 

    console.log("printing " + data) 
} 

function getData (cb) { 

    console.log("getting data"); 

    setTimeout(function(){ 
     console.log("finishing data"); 
     cb("this is the data"); // call the callback function 
     //return "this is the data" // this return is useless, remove it 
    }), 3000; 
} 

data(printData); 

Для справки - https://jsfiddle.net/xsrLeo9u/2/

Смежные вопросы