将参数传递给forEach循环内的回调函数?

时间:2019-04-05 11:43:00

标签: javascript

我正在使用客户端JavaScript。我想在forEach循环中运行回调,并将forEach循环中变量的值传递给回调。

这是我的(破损)代码:

var tags = ['foo', 'bar'];
var displayTag = function(error, result) {
    if (error) {
        console.warn("Error from server", error);
    }
    else {
        console.log(tag);
    }
};
tags.forEach(function(tag) {
    if (is_project) {
        Project.addTag(visualisation_id, tag, displayTag);
    } else {
        Page.addTag(page_id, tag, displayTag);
    }
});

运行此命令时,我收到警告,提示tag中的console.log(tag)未定义。

如何将tag的值传递给回调?我敢肯定这很简单!

2 个答案:

答案 0 :(得分:1)

也许您可以使用高阶函数(返回函数的函数):

var tags = ['foo', 'bar'];
var createDisplayTagCallback = function(tag) {
  return function (error, result) {
    if (error) {
      console.warn("Error from server", error);
    }
    else {
      console.log(tag);
    }
  }
};
tags.forEach(function (tag) {
  if (is_project) {
    Project.addTag(visualisation_id, tag, createDisplayTagCallback(tag));
  } else {
    Page.addTag(page_id, tag, createDisplayTagCallback(tag));
  }
});  </script>

虽然没有测试此代码...

答案 1 :(得分:0)

您必须在addTag中有一个回调

this.addTag(visualisation_id, tag, callback) {
  callback(error, result)
}

将其更改为

this.addTag(visualisation_id, tag, callback) {
  callback(error, result, tag)
}