我正在使用客户端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的值传递给回调?我敢肯定这很简单!
答案 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)
}