0

Node.js には、イベント ループを利用することにより、イベント駆動型の非同期コールバックの概念があることを理解しています。

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

ここでは、 database.query() が直接結果を返すことを期待する代わりに、2 番目のパラメーターである無名関数を渡します。これで、Node.js はデータベース リクエストを非同期的に処理できるようになりました。database.query() が非同期ライブラリの一部である場合、これが Node.js の動作です: 前と同じように、クエリを取得してデータベースに送信します。しかし、それが完了するのを待つ代わりに、「将来のある時点でデータベースサーバーが完了し、クエリの結果を送信するときに、渡された無名関数を実行する必要がある」という精神的なメモを作成しますデータベース.クエリ()"

私はサンプルコードで同じことを試みています(私は初心者であり、Node.js DBの相互作用まで到達していないため):

[root@example]# cat server8.js
function myfun(noparm , afterend)
{
         for ( var i =0; i < 10; i ++)
                console.log("The valus is " + i);
}

function mynextfn()
{
        console.log("Hello World");
}
function afterend()
{
        console.log("Hello afterend");
}

myfun(0, afterend);
mynextfn();
[root@idc-bldtool01 example]# node server8.js
The valus is 0
The valus is 1
The valus is 2
The valus is 3
The valus is 4
The valus is 5
The valus is 6
The valus is 7
The valus is 8
The valus is 9
Hello World
[root@iexample]#

そのため、「イベントループを利用したイベント駆動型の非同期コールバックの概念」がわかりませんか?

誰かがいくつかの基本的な例を実装するのを手伝ってくれませんか?

4

1 に答える 1

0

関数をパラメーターとして渡しafterendますが、呼び出すことはありません。

関数は次のようにするmyfun必要があります。

function myfun(noparm , afterend)
{
  for (var i = 0; i < 10; i++) {
    console.log("The valus is " + i);
  }
  afterend();
}

その後、あなたが期待することが起こります;-)

そして: 2 つ目は、myfun関数が完全に同期していることです。そのため、Node.js が関数mynextfnのコンテンツの前に実行される可能性はありませんmyfun

afterendの前に実行される可能性がありますがmyfun、これはタイミングの問題に依存します。どちらも重い作業を行わないためです。

于 2012-09-29T09:10:53.320 に答える