2015-10-07 3 views
0

У меня этот код:Как вернуться из вложенного обработчика функции в JavaScript?

function fetchSocialCount(type,fileSrc){ 
    var count = {likes: 0, dislikes: 0}; 
    var req = new XMLHttpRequest(); 
    req.onload = function(){ 
     if(req.status === 200 && req.readyState === 4){ 
      var countResponse = json_encode(req.responseText); 
      count.likes = countResponse.likes; 
      count.dislikes = countResponse.dislikes; 
      return count; 
     } 
    } 
} 

Итак, я хочу, чтобы вернуться count из выражения в req.onload функции, как если бы он был возвращен из функции fetchSocialCount. Как я могу это достичь?

+1

* «Как я могу достичь этого?» * Вы не можете. Так же, как вы должны назначить функцию 'onload' для получения ответа, вызывающий элемент' fetchSocialCount' должен передать функцию 'fetchSocialCount' (или что-то подобное). Это один из наиболее часто задаваемых вопросов JavaScript в Stack Overflow. –

ответ

2

req.onload является асинхронным. Вам нужно использовать обратные вызовы, обещания или что-то подобное, чтобы получить итоговый «счет»

function fetchSocialCount(type,fileSrc, cb){ 
    var count = {likes: 0, dislikes: 0}; 
    var req = new XMLHttpRequest(); 
    req.onload = function(){ 
     if(req.status === 200 && req.readyState === 4){ 
      var countResponse = json_encode(req.responseText); 
      count.likes = countResponse.likes; 
      count.dislikes = countResponse.dislikes; 
      cb(count); 
     } 
    } 
} 

//calling fetchSocialCount 
fetchSocialCount(my_type, my_file_src, function(count){ 
    //here it is 
    console.log(count); 
});