1

The Node Beginner Book を読んでいます。イベント駆動型の非同期コールバックの章で、著者は非同期コールバックの考え方を説明する例を示しています。コード例は次のようになります。

var result = database.query("SELECT * FROM hugetable");
console.log("Hello World");

コールバック関数を database.query に追加すると、コードは非同期になります。

database.query("SELECT * FROM hugetable", function(rows) {
    var result = rows;
});
console.log("Hello World");

私の質問は、コールバック関数を追加した直後に database.query() 関数が非同期になる理由です。私は Javascript と JQuery の経験がないので、理解できないのかもしれません。

4

2 に答える 2

3

node.js には、非同期フレーバーと同期フレーバーの両方を持つ多くの関数があります。たとえば、ファイル ( docs )の内容を読み取るには 2 つの方法があります。

//asynchronous
fs.readFile("filename.txt", function(err, data) {

});

//synchronous
var data = fs.readFileSync("filename.txt");

著者が提供する例は、実際には多少わかりにくいように見えますが、 aが 2 番目の引数として渡されるdatabase.queryかどうかによって、 が非同期呼び出しを行う可能性があります。callback

たとえば、次のように実装できます。

function query(queryString, callback) {
  if(callback !== undefined) {
    queryInternal(queryString, callback);
    return;
  }
  else {
    return queryInternalSync(queryString);
  }
}

function一般に、aはどちらかasynchronousまたは(両方ではない)であるという慣習があると思いsynchronousますので、あなたの直感は正しいです。

このsynchronous場合、はクエリされた内容を取得したconsole.log後に実行されるのに対し、 は関数が返されるとすぐに実行され、が実行される前に実行されることに注意してください。resultasynchronousconsole.logquerycallback

于 2013-07-10T05:04:22.480 に答える
1

Asynchronously実行される次のステートメントに移動しないことwaitsを意味しますresponse

2 番目の例では、これを実行している間、コールバック関数が応答を処理します。待機せず、 in をconsole.log("Hello World");表示outputconsoleます。

これを読む:

于 2013-07-10T04:54:46.283 に答える