如何将ADDITIONAL参数传递给现有的回调函数

时间:2016-04-05 07:24:19

标签: javascript closures

我无法找到答案,尽管这应该是一个相对常见的问题。所有其他问题似乎与简单地将变量添加到空闭包有关。

我有一个带有两个参数的回调; errdocs,我仍然需要,但也想添加一个额外的`data。

参数。
db.findOne().exec(function (err, docs) {
    // err is defined
    // docs is defined
});

我需要随身携带data,所以假设我可以这样做:

db.findOne().exec(function (err, docs, data) {
    // err is defined
    // docs is defined
}(data));

这不起作用。所以,我尝试了以下内容:

db.findOne().exec(function (err, docs, data) {
    // err is null
    // docs is null
}(null, null, data));

这也扼杀了原始变量errdocs

那么,我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

只要在外部作用域中定义了此变量(在调用data方法之前),就可以在回调中使用db.findOne()变量:

var data = ...
db.findOne().exec(function (err, docs) {
    // err is defined
    // docs is defined
    // data is defined
});

答案 1 :(得分:0)

你必须将你的函数包装在回调函数中。

如果您有以下功能:

db.findOne().exec(function (err, docs) {
    // err is defined
    // docs is defined
});

您可以使用以下功能传递其他参数:

db.findOne().exec(function (err, docs) {
var data={a:'a'};
    yourFunction(err, docs, data);
});

function yourFunction(err, docs, data){
// access data here
}