我无法找到答案,尽管这应该是一个相对常见的问题。所有其他问题似乎与简单地将变量添加到空闭包有关。
我有一个带有两个参数的回调; err
和docs
,我仍然需要,但也想添加一个额外的`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));
这也扼杀了原始变量err
和docs
。
那么,我该怎么做呢?
答案 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
}