2017-05-11 29 views
0

このプログラムは、最初に0を外しました。189です。私はJavaScriptを非同期に実行していることが分かります。両方のログを出力する正しい方法は何でしょうか189?コールバック地獄に入ることなく?console.logsの出力値が同じになるようにするにはどうすればよいですか?

roaming = []; 

connection.query("SELECT land FROM roaming", function (err, res) { 
    if (err) { 
     console.log("Error: " + err); 
    } else { 
     res.forEach(function(entry){ 
      roaming.push(entry.land); 
     }); 
     console.log(roaming.length); 
    } 
}); 
console.log(roaming.length); 
+0

を待っています。 'connection.query()'は非同期関数です。 2つ目の 'console.log()'はすぐに実行され、完了するのを待つことはできません。そのため、非同期関数にはコールバックがあります。 – Barmar

答えて

1

Javascriptでは、「コールバック関数」を使用できます。これは、関数をパラメータとして渡すことができることを意味します。 例:

function hello (val1, callback) { 
    console.log(val1); 
    callback(); 
} 
function callback() { 
//do something. 
} 

だから、あなたは( 'A'、コールバック)ハローなどのコールバック関数を渡すことができます。私は非同期を使用します

+0

これは回避策のようですが、私はここで不調かもしれません。しかし、これを行う標準的な方法を検討していますか? 2つのSQL呼び出しの値を必要とする関数がある場合はどうなりますか?それからコールバックにコールバックを広告する必要がありますか? – vonhact

2

は/あなたがそれらを同じを取得することはできません

async function asyncStuff() { 
    //async stuff 
} 

await asyncStuff(); 
関連する問題