2013-07-25 6 views
0

MySQL 서버에서 데이터를 가져 오는 for 루프가 있습니다. 나중에 사용할 수 있도록 4 개의 값을 변수에 넣길 바랍니다. 여기에 내가 가진 코드가있다. 웬일인지, thev는 정의되지 않는다고합니다?for 루프를 사용하여 가변 배열 객체 생성

create(); 

function create(){ 

for(var i=0;i<4;i++){ 

     var thev=[]; 

     client.query('SELECT curattend FROM table1 WHERE ind=?',[i], function(err,result){ 
     thev[i] = result[0].curattend; 

     }); 

     } 
     return thev; 
} 
    console.log(thev[2]); 

이 문제에 대한 조언을 주시면 감사하겠습니다.

+1

@minitech "할 수있다"관련 있다는을 "[가능성]"(기술적으로 가능 ..하지만 아, 귀찮게로) . 나는 더 엄격한 언어를 사용 했어야했는데, 지적 해 주셔서 고맙습니다. – user2246674

답변

1

여기에는 많은 문제가 있습니다.

  1. thevcreate 로컬입니다. create의 반환 값을 지정하지 않으므로 여전히 정의되지 않습니다.

  2. var thev = [];for 루프 내에 있으면 안됩니다. 하나의 요소 만 포함하게됩니다. 아니면 그렇 겠지만 ...

  3. query에 대한 콜백은 재미있을뿐만 아니라, 그것은 비동기 호출이며, 함수에서 실제로 반환 할 때까지 100 % 확신하지 못했습니다.

난 그냥이 async 라이브러리를 사용하여 할 것입니다 :

function range(start, end) { 
    var result = []; 

    while(start < end) { 
     result.push(start); 
     start++; 
    } 

    return result; 
} 

async.map(range(0, 4), function(i, callback) { 
    client.query('SELECT curattend FROM table1 WHERE ind = ?', [i], function(err, result) { 
     if(err) return callback(err); 
     callback(null, result[0].curattend); 
    }); 
}, function(err, thev) { 
    // Continue 
}); 
+0

루프 안의 비동기를주의하지 못했습니다. – sabithpocker

+0

완벽하게 ... 고마워! – pj409

관련 문제