繁体   English   中英

Node.js-匿名函数中的参数未传递变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM