【发布时间】:2017-10-01 12:12:57
【问题描述】:
我想为我的 mapreduce 代码定义一个辅助函数,它可以用另一个函数(即依赖注入)进行参数化,类似于下面的定义:
var helper = function(f) {
return function(x) {
return f(x); // just an example
};
}
在调用Mongo的mapreduce时,我在作用域中传递了(已经解析的)函数:
var options = {
scope: {
doStuff: helper(someFun)
},
…
};
var map = function() { … };
var reduce = function(key, values) { doStuff(…); … };
db.collection('test').mapReduce(map, reduce, options);
我希望f 将在返回的函数中包含someFun,并且可以在map 或reduce 函数中使用。但它没有,mapreduce 失败并且 Mongo 报告:
{ MongoError: ReferenceError: f is not defined : …
这可以吗?我是否需要重写我的函数以保留范围/闭包?如果可能的话,我也想避免在范围内定义f,因为我觉得这可能会在未来中断(开发人员忘记将所有必需的功能添加到范围等)
【问题讨论】:
-
这不是 JavaScript 中的
this关键字的用途吗? -
我很高兴以正确的方式使用
this来解决我的问题,尽管我认为这与我的问题无关。
标签: javascript mongodb scope mapreduce