[英]Node.js - Argument in an anonymous function without passing it a variable?
我来自C / C ++背景,尝试将问题缠在node.js的语法上确实很麻烦。 无论如何,我在网上找到了一些代码来解释阻塞代码和非阻塞代码之间的区别,这让我感到困惑。 我已经尝试过搜索和阅读书籍,但是找不到答案。 该示例代码从数据库中检索用户ID。
阻止版本:
function getUser(id) {
var user = db.query(id);
return user;
}
console.log('Name: ' + getUser(432).name);
非阻塞版本(Node.js):
function getUser(id, callback) {
db.query(id, callback);
}
getUser(432, function (user) {
console.log(user.name);
});
我对阻止版本很好,因为在这种情况下,用户ID分配给了变量user
。 我似乎无法理解的是匿名函数中的user
参数。 似乎user
只是虚空出现,然后对其执行了操作,而与现有变量没有任何关系。
程序如何知道user
是谁? 它如何与用户ID建立联系? 老实说,我无法确定这是我对JavaScript / Node的了解不足,还是编写此代码的人是否不费心去完成它。 我所知道的是,这在C / C ++中毫无意义。
好吧,您已经要求该程序为您获取用户,并提供了一个接受参数的函数(或更多函数,具体取决于库)。 操作完成后, getUser
将调用您通过操作结果传递的回调。
这是一个虚拟的getUser实现:
function getUser(id, callback) {
setTimeout(function() {
var result = {id: id, name: "Madara"};
callback(result);
}, 1000); // Wait a second before doing it. Asynchronous!
}
getUser(42, function(user) { console.log(user); });
该函数将等待一秒钟,然后使用一个参数调用您传递的回调,在这种情况下,该对象将具有您传递的ID和名称“ Madara”的对象。
请注意, getUser
没有任何阻塞,因此getUser
立即返回,而无需等待回调被调用。
如果将您的示例转换为C,也许会对您有所帮助。我已经很长时间没有使用C了,但我认为它看起来像这样。
void getUser(int id, void (*callback)(User)) {
db.query(id, callback);
}
void printUserName(User user) {
printf(user.name);
}
getUser(432, &printUserName);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.