作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 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
会立即返回,而无需等待调用回调。
关于javascript - Node.js - 匿名函数中的参数而不向其传递变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562787/
我是一名优秀的程序员,十分优秀!