绑定variables到callback函数

我在我的控制器中有几个函数调用一些数据库函数。 所有这些数据库函数都会执行“错误callback”,这意味着如果发生数据库错误,它们将执行一个单独的callback来处理错误。 例:

exports.referralComplete = function(req, res){ /*getting id etc.*/ db.startDatabaseConnection(function() { db.flagReferralAsDone(id, function(success) { db.endDatabaseConnection(); /*doing stuff on success*/ }, onError); }, onError); function onError(err, description) { logger.error(description + ": " + err); user.pageNotFound(req, res); } } 

我有类似的多个function,这是调用不同的数据库function。 问题是我现在已经将onError()复制到它们中的每一个的范围中,因为在处理错误时我需要req和resvariables。 我当然可以将res和req传递给数据库函数,然后将它们作为parameter passing给错误callback函数,但是我认为可能有更好的方法。

所以问题是:是否有可能以某种方式将res和req绑定到一个全局的onErrorcallback函数,这样我不必将variables作为parameter passing给db函数?

我对node.js和javascript一般都很陌生,所以如果有更好的处理错误的方法,请告诉我。

绑定很简单!

 db.startDatabaseConnection(function(){ // whatever }, onError.bind(this, var1, var2)); 

你可以通过点击这个真棒链接了解更多关于绑定的信息,即使链接很长 。

这是一个真正的基本演示

 // a function var something = function (a, b, c) { console.log(a, b, c); }; // a binding of something with 3 defined args var b = something.bind(null, 1, 2, 3); // call b b(); //=> 1 2 3 

在幕后,这基本上是发生了什么事情

 // ES6 const myBind = (f, context, ...x) => (...y) => f.call(context, ...x, ...y); // ES5 var myBind = function(fn, context) { var x = [].slice.call(arguments, 2); return function() { var y = [].slice.call(arguments, 0); return fn.apply(context, x.concat(y)); }; }; var b = myBind(console.log, console, 1, 2, 3); b(); // => 1 2 3 b(4,5,6) // => 1 2 3 4 5 6 

部分应用

类似于bind是部分应用程序

在计算机科学中,部分应用(或部分function应用)是指将一些参数固定到一个函数的过程,产生另一个较小的函数。

在这里,我们可以做一个非常简单的帮助程序,帮助我们完成这个任务

 const partial = (f, ...x) => (...y) => f(...x, ...y) const foo = (...args) => console.log(args) partial (foo, 1, 2, 3) (4, 5, 6) // [ 1, 2, 3, 4, 5, 6 ]