0

そのため、今日、非同期データベース呼び出しをカスタム関数に配置する必要がある状況に遭遇しました。例えば:

function customfunction(){
    //asynchronous DB call
}

次に、プログラムの別のポイントから呼び出します。まず、念のため言っておきますが、これはまだ非同期ですか? (質問の続きという前提で操作します)。ここからやりたいことは、非同期 DB 呼び出しの完了時に別の特定の関数を呼び出すことです。DB 呼び出しが完了時にコールバック関数をトリガーすることはわかっていますが、問題は、このカスタム関数が非常に汎用的であることです (つまり、コード内のさまざまなポイントから呼び出されることを意味します)。そのため、特定のメソッド呼び出しをコールバックに入れることができません。すべての状況に適合するわけではないため、機能します。私が言っていることが明確でない場合は、私がやりたいことの例を以下に示します。

//program start point//
customfunction();
specificfunctioncall(); //I want this to be called DIRECTLY after the DB call finishes (which I know is not the case with this current setup)
}

function customfunction(){
    asynchronousDBcall(function(err,body){
    //I can't put specificfunctioncall() here because this is a general function
    });
}

上記の状況を機能させるにはどうすればよいですか?

ありがとう。

4

2 に答える 2

4

これはあなたがそれを行う方法です:

//program start point//
customfunction(specificfunctioncall);

そして customfunction() で:

function customfunction(callback){
    asynchronousDBcall(function(err,body){
        callback();
    });
}

関数は、文字列や数値と同じように渡すことができる単なるデータです。実際、無名関数ラッパーを使用すると、 CODEを単なるデータとしてfunction(){...}扱うことができます。

したがって、関数の代わりに DB 呼び出しの完了時にコードを実行する場合は、次のようにします。

customfunction(function(){
    /* some code
     * you want to
     * execute
     */
});
于 2013-01-08T07:19:22.140 に答える
1

Jay さん、asyncDbCall がデータベース ライブラリ関数の場合、そのパラメータの 1 つとしてコールバック関数があります (実際の非同期関数の場合)。specificFunctionCall をパラメーターとしてその関数に渡せば完了です。

function CustomFunction{
  asyncDbCall(.....,specificFunctionCall);
}

CustomFunction を呼び出すと、asyncDbCall 関数が呼び出され、完了すると、asyncDbCall が自動的にコールバック関数を呼び出します。

于 2013-01-08T07:00:31.223 に答える