2012-06-09 4 views
1

내 파일을 읽고 파싱하는데 제대로 작동하지만 출력 문자열을 반환하지 않는 것 같습니다. 클라이언트에서 할당 된 변수에서이 문자열에 액세스 할 수 싶습니다. 나는 비동기 시리즈를 사용하여 콜백 지옥을 완화하고 출력이 콘솔에 잘 맞도록 돕는다. 그러나 같은 지점에 리턴 출력을 떨어 뜨리면 작동하지 않습니다. 제안? async.series에 대한 콜백과 같은 비동기 기능에서 보내고node.js에서 파싱 된 파일의 출력을 반환합니다.

embed_analytics: function(){ 
    var output; 

    async.series({ 
      read_file: function(callback){ 
       fs.readFile(__rootpath+'/apps/analytics/data/analytics.json', 'UTF-8', function(err,data){ 
        if(err) { 
         console.error("Could not open file: %s", err); 
         process.exit(1); 
        } 
        try { 
         var config = JSON.parse(data); 
         callback(null, config); 
        } 
        catch(exception) { 
         console.error("There was an error parsing the json config file: ", exception); 
         process.exit(1); 
        } 
       }); 
      } 
     }, 
     function(err, results) { 
      _.each(results.read_file, function(element){ 
       output+="$('"+element.Selector+"').click(function(){_gaq.push(['_trackEvent',"+element.Category+","+element.Action+","+element.Label+"]);});\n"; 
      }); 
      console.log(output);  
     } 
    ); 
} 
+0

비동기 영역과 함께 제공됩니다. 단순히 불가능합니다. 자신의 API에 콜백 매개 변수를 지정해야합니다. – Pointy

+0

'callback hell'에 대해 들어 본 적이 없습니다. 결코 그것도 들어 가지 않았다. 비동기적인 사고 방식으로 전환하지 않고 동 기적으로 프로그램을 계속하려고 만한다면 당신은 그것에 빠지게됩니다. –

+0

아, 오늘 뭔가 새로운 것을 배웠습니다. 모두 도움을 주셔서 감사합니다. – codeisforeva

답변

3

return, 아무것도 의미하지 않는다. 당신은 주요 기능에 콜백을 통과해야하고, output으로 전화 할게 : 당신이 다른 모든 비동기 기능으로

embed_analytics: function(final_callback){ 
    ... 
     }, 
     function(err, results) { 
      _.each(results.read_file, function(element){ 
       output+="$('"+element.Selector+"').click(function(){_gaq.push(['_trackEvent',"+element.Category+","+element.Action+","+element.Label+"]);});\n"; 
      }); 
      final_callback(output);  
     } 
    ); 
} 

을 그리고 사용

embed_analytics(function(data) { 
    // do something with data 
}); 
1

는, 비동기의 당신 은 비동기 함수에서 어떤 것을 반환 할 수 없습니다. 작업이 완료되면 호출되는 콜백을 수락해야합니다. Brandon Tilley는 올바른 코드를 가지고 있습니다.