我有一个javascript函数“ data.getOrdersByUsersModifiedDate ”,它正在调用另一个函数“ database.getDb ”。第一个函数获取一个“ request ”参数对象,该对象定义了参数。但是,我似乎无法理解如何将data.getOrdersByUsersModifiedDate中的参数传递给database.getDb,以便我可以在行中使用它
var orders = db.order.find()。toArray(function(err,result)
如何将我的请求参数从顶部函数“getOrdersByUsersModifiedDate”传递给较低的函数“database.getDb”,以便在我获得订单时将其用作过滤器
data.getOrdersByUsersModifiedDate = function (request, next) {
database.getDb(function(err, db) {
if(err) {
next(err);
} else {
var orders = db.order.find().toArray(function(err, result) {
if(err) return next(err);
next(null, result);
});
}
});
};
答案 0 :(得分:1)
使用bind
。
bind和apply允许开发人员指定函数调用的上下文(this
)。
Bind
使用赋予bind的参数(来自第二个参数)创建一个新函数,而apply
使用新上下文调用函数,并将参数作为数组传递(参见doc)。 / p>
这将有助于你在回调地狱中解决范围问题。
穷人实现这一目标的方法是使用let that=this
。
修改:正如评论中的OP所指出的,arrow functions in ES6 do not bind this;因此使用箭头函数解决了OP问题。
data.getOrdersByUsersModifiedDate = function (request, next) {
database.getDb(function(err, db) {
if(err) {
next(err);
} else {
let {arg1, arg2, arg3} = request; // This should work with ES6
var arg1 = request.arg1; // Otherwise this?
var orders = db.order.find().toArray(function(err, result) {
if(err) return next(err);
next(null, result);
});
}
}.bind(this)); // Scope this to the context of getOrdersByUsersModifiedDate
};