2016-08-08 2 views
0

nodejs에 아직 익숙하지 않아서 내가 무엇을 잘못하고 있는지 확실하지 않아이 함수에서 값을 반환하려고합니다. 그러나 변수 outhjk 반환하려고 항상 리셋됩니다. 쿼리는 내부 작동하지Nodejs 변수 값 재설정

function executeQuery(stmt, data) { 
 
    var outhjk = ""; 
 
    pool.connect(function(err, client, done) { 
 
    if(err) { 
 
     console.error('error fetching client from pool', err); 
 
    } 
 
    client.query(stmt, data, function(err, result) { 
 
     //call `done()` to release the client back to the pool 
 
     done(); 
 

 
     if(err) { 
 
     return console.error('error running query', err); 
 
     } 
 
     outhjk = "just work please"; 
 
    }); 
 
    }); 
 
    return outhjk; 
 
}

+0

pool.connect 떨어져 요점을 알아 보려면이 읽기 : 콜백, 당신은 그런 일을 할 것 le time 및 last line은 비동기 특성으로 인해 실행되기 전에 반환됩니다. –

답변

0

는 = ""그 직접 반환 VAR을 pool.connect; node.js의 최신 버전을 사용하는 경우 새로운 Promise ((resolve, reject) => {})를 사용할 수 있습니다. 또는 이전 버전에서 'async'모듈 또는 node.js 비동기 함수를 처리하는 다른 모듈을 사용하는 경우

0

client.query는 비동기입니다. return 문 : 함수와 호출하는 그런

function executeQuery(stmt, data, callback) { 
    var outhjk = ""; 
    pool.connect(function(err, client, done) { 
    if(err) { 
     console.error('error fetching client from pool', err); 
    } 
    client.query(stmt, data, function(err, result) { 
     //call `done()` to release the client back to the pool 
     done(); 

     if(err) { 
     return console.error('error running query', err); 
     } 
     outhjk = "just work please"; 
     callback(outhjk); 
    }); 
    }); 
} 

: 리턴 빠르게 때문에 함수가 실행되기 전에 return outhjk;

이 처리하는 표준 방법은 콜백 함수를 사용하는 것입니다 ... 호출됩니다

var stmt = //stmt value here; 
var data = //data value here; 
executeQuery(stmt, data, function (outhjk) { 
    //here you can use outhjk 
}); 

litt를 취할 것 callbacks