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

How to pass ADDITIONAL arguments to an existing callback function

本文关键字:回调 函数 参数传递 ADDITIONAL      更新时间:2024-01-21

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

我有一个回调,它接受两个参数;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

那么,我该怎么做呢?

您可以简单地在回调中使用data变量,只要该变量是在外部范围中定义的(就在调用db.findOne()方法之前):

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

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

如果你有这样的功能:

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
}