2

非同期ではなく順番にコードを実行するための単純なコールバックを試しています。これは動作しません:

function fn1(string, func){
    console.log("hello");
    func();
};

function fn2(){
    console.log("world");
}

fn1("meaninglessString", fn2());

実際には、コンソールに「world」、「hello」の順に出力され、クラッシュします。しかし、これはします:

function fn1(string, func){
    console.log("hello");
    func();
};

fn1("meaninglessString", function(){
    console.log("world");
});

の呼び出しで常にコールバック関数コードを記述するfn1必要がありますか、それともすでに記述されている関数を参照する方法がありますか?また、ある関数が別の関数の終了後に発生するようにしたい場合、これはNode.jsでこれを行うための最良の方法ですか?

4

2 に答える 2

6

最後の行を見てください:

fn1("meaninglessString", fn2());

代わりに次のようになります。

fn1("meaninglessString", fn2);

括弧を含めると、fn2がすぐに実行されます。

于 2013-01-27T23:26:05.797 に答える
2

最初のブロックには次のものがあります。

fn1("meaninglessString", fn2());

これは、「引数 "meaninglessString" を指定して fn1 を呼び出し、引数なしで fn2 を呼び出した結果」という意味です。そのため、インタープリターは fn2 を呼び出し、そこから何も返されず、「world」を副産物として出力し、引数「meaninglessString」と undefined を指定して fn1 を呼び出し、「hello」を出力して、まだ実行されていない関数を呼び出します。 set(undefined) したがって、クラッシュします。

代わりに、以下のように関数を呼び出した結果ではなく、関数を渡すようにコードを変更すると、期待どおりに機能します

function fn1(string, func){
    console.log("hello");
    func();
};

function fn2(){
    console.log("world");
}

fn1("meaninglessString", fn2);
于 2013-01-27T23:36:02.407 に答える