在JavaScript中异步工作并与第三方代码交互时(特别是在Node的情况下),没有标准方法来定义所需数据如何传递到下一个函数。有些东西可以在某些情况下提供帮助,例如async和Promises,但这些东西可能会使事情变得更加复杂,并且不会处理主要问题,即在请求期间跟踪先决条件数据。这导致代码如下:
function tryLogin(username, password, callback) {
// Variables possibly defined here while sanitizing data
thirdPartyLogin(username, password, function(err) {
if(err) return callback(err, null);
// Perform internal login actions here
callback(null, new Session(username));
});
}
它看起来很简单,而且很简单,但它有几个问题:
但是,虽然稍微复杂一点,但在这样的回调中使用.bind
会有所帮助:
var tryLogin = (function(){
var start = function(username, password, callback) {
// Sanitizing data
thirdPartyLogin(username, password,
afterLoginAttempted.bind({u: username, c: callback})
);
},
afterLoginAttempted = function(err) {
if(err) return this.c(err, null);
// Perform internal login actions here
this.c(null, new Session(this.u));
};
return start;
}());
这有以下好处:
我问,因为我从来没有见过bind
在我自己以外的任何作品中使用var em1 = document.getElementById("em1");
var em2 = document.getElementById("em2");
var emHint = document.getElementById("emHint");
em1.addEventListener("keyup", function(){match_handler(em1, em2, emHint);});
em1.addEventListener("focus", function(){match_handler(em1, em2, emHint);});
em1.addEventListener("blur", function(){match_handler(em1, em2, emHint);});
em2.addEventListener("keyup", function(){match_handler(em1, em2, emHint);});
em2.addEventListener("focus",function(){match_handler(em1, em2, emHint);});
em2.addEventListener("blur", function(){match_handler(em1, em2, emHint);});
function match_handler(field_one, field_two, text_hint){
if (field_one.value != field_two.value) {
text_hint.style.display = "block";
} else {
text_hint.style.display = "none";
}
}
,我觉得好像我可能是唯一一个。所以如果有人有更好的建议,我想知道。或者,如果这是一个很酷的新想法,请告诉我。我很乐意接受评论和批评,但最重要的是我真的只想知道更有经验的程序员对此的看法。