2016-08-08 17 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オフ要点を学ぶために、これを読んで:コールバックは、あなたがそのようなことをするだろう直前の行は非同期性のため実行前に返されます。 –

答えて

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

関連する問題