2017-09-14 6 views
0

テーブルの最大IDが必要です。この値にアクセスして別のテーブルに挿入したいのですが、コールバック関数の外部にアクセスできません。ブロック外でこの値にアクセスするにはどうすればよいですか?Node.jsの変数にtableのmax idの値を代入する方法

SequelizeとNode.jsを使用しています。私のコードは次のとおりです。

var employeeCode = 'EMP1'; 

var employeeCodeObj = Employee.max('id').then(function(max) { 
    var maxid = max + 1; 
    employeeCode = "EMP" + maxid; 
    console.log(employeeCode); 
}).catch(err => { 
    res.send({ 
    msg: 'Unable to generate employee code!', 
    status: 'Failure', 
    response: 500, 
    data: [] 
    }); 
}); 
console.log(employeeCode); 

表に1つの行を持っているが、私は、この値を印刷するとき、結果がEMP2あるべきとき、それは常にEMP1を印刷します。

+0

実行フローがコードの一部をキャッチしていないことを確認してください。 – ramasCoder

+0

はい、私は最大値を印刷するときはthen()で2を印刷し、外側では1を出力します。 –

答えて

2

Node.jsは非同期です。

これは、最後のconsole.logが最初の関数を実行することを意味します。

max関数のコードが実行され、残りのコードが実行されます。 maxが計算されるときだけ、then関数は実行されますが、console.logはすでに実行されています。

then関数内でmax employeeを必要とするコードを実行するか、asyncなどのモジュールを使用して非同期コードを処理し、コールバックhellを解決する必要があります。

http://callbackhell.com/を確認してください。

+0

はい、正しい外部のコンソールが最初に実行され、次にmaxクエリが実行されます。私は約束を混乱させています。非同期コードに使用する最新の自由を教えてください。 –

+1

私は "async"(http://caolan.github.io/async/)を使っています。理解して使用するのが非常に簡単です。 –

+0

助けてくれてありがとう –

関連する問題