2

私はこの簡単なコードを持っています:

console.log('calling doWork func...')
doWork('a', 'b', myCb);

function doWork(param1, param2, callback)
{
        console.log('in func')
        callback();
}


function myCb(a)
{
        console.log('in callback... for value ' + a)
}

コールバック関数を使用して関数を実行しています-

私が得る出力は次のとおりです。

"calling doWork func..."
"in func"
"in callback... for value undefined"    // notice the undefined

大丈夫。

ここで、指定されたパラメーターでコールバックを呼び出す必要があります-次のようなものです(()関数が実行さ れているため、これは正しくありません):

doWork('a', 'b', myCb('xxxx'));

出力を次のようにしたい:

in callback... for value  xxxx

myCb 呼び出しでパラメーターを送信するにはどうすればよい doWork('a', 'b', myCb);ですか? ( 'コールバック関数を実行するときは、値 xxxx に従って実行してください')

何か助けはありますか?

psグローバルフラグソリューションを避けたい

ありがとう。

4

4 に答える 4

4

一般的な解決策は、代わりに別の関数を作成することです。

doWork('a', 'b', function () {
    myCb('xxxx');
});

カリー化を抽象化する関数を使用することもできます。JavaScript (ES5) には組み込みのFunction.prototype.bind. ネイティブでbindはコールバックが遅くなり、ブラウザーでのサポートが制限されます (MDN ページを参照)。

doWork('a', 'b', myCb.bind(null, 'xxxx'));
于 2012-07-25T06:58:27.653 に答える
1

解決策の1つは、以下を使用すること.bindです。

doWork('a', 'b', myCb.bind(null, 'xxx'));
于 2012-07-25T07:00:50.947 に答える
1

または、適用と引数を使用できます

console.log('calling doWork func...')
doWork('va', 'b', myCb);

function doWork(param1, param2, callback)
{
        console.log('in func')


        callback.apply(this,arguments);
}


function myCb(a)
{
        console.log('in callback... for value ' + a)
}

JSbin の

于 2012-07-25T07:07:14.860 に答える
0
console.log('calling doWork func...')
doWork (myCb, "a", "b");
function doWork (callback) {
console.log('in func')
callback (arguments[1], arguments[2]);
}
function myCb (param1, param2) {
console.log('in callback... for value ' + param1)
}

これがお役に立てば幸いです

于 2012-07-25T07:02:24.117 に答える