javascript - 在回调方法中传递动态值

标签 javascript node.js

有没有办法将动态值传递给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');
   }

我引用了这篇文章,将值传递给回调函数。

链接:[JavaScript:将参数传递给回调函数

输出似乎总是 9

如何动态传递值?回调函数始终引用文件名的最后一个值。

最佳答案

在您的示例中,您在每次迭代时更改同一变量filename 的值。

因此,您应该以某种方式将 filename 的值绑定(bind)到 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')
}

替代解决方案是使您的测试函数成为函数工厂:

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'));
}

关于javascript - 在回调方法中传递动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19678646/

相关文章:

javascript - 如何在 Mocha 测试中模拟全局变量(定义、模块、窗口)?

jquery - nodejs 或 envjs - 动态 jquery tmpl

javascript - 用于增强 HTML5 输入 [type=range] 的插件,例如 jquery-mobile slider

java - 无法使用 document.getElementById 获取元素,返回 null

javascript - 你会如何在定时器上做一个 for 循环?

node.js - Nodejs Express,如何在调用我的 API 时限制我网站的每个用户的速率?

javascript - 在 Node.JS 中向 http.get 传递参数

javascript - 如何在 HTML 中像普通 javascript 一样使用 NPM 包

javascript - 是否可以在 Mongo 中执行接受任何参数的函数?

javascript - 网络应用程序 : What should I send back to the user?