在Javascript中传递函数内的值

时间:2017-04-20 11:30:50

标签: javascript callback request

我有一个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);
                    });
                }
            });
        };

1 个答案:

答案 0 :(得分:1)

使用bind

bindapply允许开发人员指定函数调用的上下文(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
};