【发布时间】:2017-02-20 05:55:50
【问题描述】:
这件事一直困扰着我,我似乎找不到一个直接的答案。
这是我经常使用的一种 Node 函数,它处理 Web 请求并进行一些 IO:
function handleRequest(req, res) {
doSomeIo()
.then(function(result) {
res.send(result)
})
}
这个函数被调用并且 res 参数被设置为当前响应对象并且它进入 IO 的土地,而它在那里播放第二个请求通过并将 res 设置为一个新对象?现在第一个请求从 IO 返回,并使用 res 对象,这是现在的第一个实例还是第二个 ie 每次调用 handleRequest 函数时,节点本质上都会为所有内容制作一个单独的副本,使用它自己的参数值还是存在只有一个实例及其参数?上述函数中的参数在异步环境中是否安全,或者这样做会更好:
function handleRequest(req, res) {
doSomeIo()
.then(function(res) {
return function(result) {
res.send(result)
}
}(res))
}
或者我只是完全不知道 Node 和 Java Script 是如何工作的,这似乎很有可能。
【问题讨论】:
-
为什么第二个请求会替换您在函数中引用的请求?您的函数永远不会丢失对原始请求的引用。每当有新请求进来时,就会创建一个新对象,而不会干扰任何其他对象。
-
感谢您的确认,我担心我可能正在编写不安全的代码并且无法找到任何确认方式。这也适用于局部函数变量还是仅适用于参数?
-
两者。实际上,您可以将参数视为在函数声明中声明的局部变量。相同的范围规则适用于它们。
-
谢谢大家的帮助,我感觉舒服多了。
-
很高兴我能帮上忙 :)
标签: javascript node.js