0

js、jquery、または nodejs のコールバック関数に動的な値を渡す方法はありますか。

for(var i = 0; i < 10; i++)
{
  filename = 'file'+i+'.html';
  request(url, function(error, response, body) {
   test(error, response, body, filename);
  });
}

  function test(error, response, body, filename) {
   console.log('file name ' + filename);
   if(response.statusCode == 200){
    console.log('done');
   }

コールバック関数に値を渡す方法については、この記事を参照しました。

link: [JavaScript: パラメータをコールバック関数に渡す

出力は常に 9 のようです

値を動的に渡すにはどうすればよいですか? コールバック関数は、常に filename の最後の値を参照します。

4

1 に答える 1

2

あなたの例では、filename反復ごとに同じ変数の値を変更します。

filenameしたがって、何らかの方法で値をコールバックのコンテキストにバインドする必要がありrequestます。

たとえばrequest、無名関数内で次のように呼び出すことができます。

function test (error, response, body, filename) {
  console.log('file name ' + filename);
  if (response.statusCode == 200) console.log('done');
}

for (var i = 0; i < 10; i++) {
  (function (filename) {
    request(url, function(error, response, body) {
      test(error, response, body, filename);
    });
  })('file'+i+'.html')
}

別の解決策は、test関数を関数ファクトリにすることです。

function test (filename) {
  return function (error, response, body) {
    console.log('file name ' + filename);
    if (response.statusCode == 200) console.log('done');
  };
}

for (var i = 0; i < 10; i++) {
  request(url, test('file'+i+'.html'));
}
于 2013-10-30T09:50:32.590 に答える