作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有下面的一段代码,它应该为 TCP 服务器的三个端口配置实现三个回调函数。控制台输出应该报告它是为三个 channel 中的哪一个设置的,但它可能不是因为变量“i”的扩展是在回调的运行时完成的,因此得到 i 的最后一个值,即 2。
我的问题:如何让 Node 在定义回调时扩展我的变量“i”?
感谢您提前提供帮助。
<p></p>
<pre><code>var p_arr = [
{src_port: 5500, src_host: "localhost", dst_port: 5501, dst_host: "localhost"},
{src_port: 5502, src_host: "localhost", dst_port: 5503, dst_host: "localhost"},
{src_port: 5504, src_host: "localhost", dst_port: 5505, dst_host: "localhost"},
];
for (var i in p_arr) {
try {
rcv_soc[i] = net.createServer(function (stream) {
if (verbose & 1) console.log("Listening on host %s, port %s...", p_arr[i].src_host, p_arr[i].src_port);
stream.on("data", function (data) {
if (verbose & 4) console.log("Received from app %d: %s", i, data);
});
});
rcv_soc[i].listen(p_arr[i].src_port, p_arr[i].src_host);
}
catch (err) {
console.log("No connection possible !!");
}
}
</code></pre>
<p></p>
最佳答案
用 i
作为参数将其包装在一个自执行函数中:
for (var i in p_arr) (function(i) {
try {
rcv_soc[i] = net.createServer(function (stream) {
if (verbose & 1) console.log("Listening on host %s, port %s...", p_arr[i].src_host, p_arr[i].src_port);
stream.on("data", function (data) {
if (verbose & 4) console.log("Received from app %d: %s", i, data);
});
});
rcv_soc[i].listen(p_arr[i].src_port, p_arr[i].src_host);
}
catch (err) {
console.log("No connection possible !!");
}
})(i)
关于javascript - 回调 node.js 中变量的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19250624/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!