gpt4 book ai didi

javascript - 无法理解nodejs代码

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:19 25 4
gpt4 key购买 nike

我知道由于事件循环,Nodejs 应该与其他语言不同,这使得一开始很难理解。但是我无法理解下面的代码(我设法让它工作,但没有逻辑解释)。

每次收到特殊请求时,我都会创建 SSH 连接的新实例,比方说:

sshCons = {};

sshObjt = new Connection();
sshCons[request_id] = sshObjt;
sshObjt.connect(); //and son on...

因此,我创建了一个新的 Connection 并将其“存储”在我们可以理解的“关联数组”中,即使我认为它只是一个带有属性及其值的对象。问题是,如果我将此代码放在上面编写的行之后:

sshObjt.on('data', function() {
// CODE
});

如果我创建了多个 sshObjt 并“存储”它们,Node 如何知道哪个 sshObjt 是发出事件的?我之前尝试过循环 sshCons 对象,但这不应该是处理此问题的适当方法。如果我错了,这应该是处理“存储”在 sshCons 对象中的多个对象的事件的正确方法?

最佳答案

正如 Kay 所说,this 有很大机会成为触发事件的对象;但这取决于为 Connection 编写代码的人。如果没有,它可能会给处理程序一个包含接收者的参数。 (您没有提供有关 Connection 来自何处的任何详细信息,因此我们无法为您检查它到底提供什么和不提供什么。)如果所有其他方法都失败,并且库设计者无法在任何地方提供接收对象,您可以创建一个闭包:

sshObjt.on('data',
(function(receiver) {
return function() {
// CODE where `receiver` is correct
};
})(sshObjt)
);

至于您对Kay评论的担忧,这是没有根据的。当您将处理程序附加到对象时,您将处理程序附加到对象 - 而不是包含它的变量。就像这样:

var annas_husband = { name: "Tim", occupation: "mechanic" }
var joeys_dad = annas_husband;
joeys_dad.occupation = "supervisor";
annas_husband // => { name: "Tim", occupation: "supervisor" }

您没有改变joeys_dad的职业。你改变了蒂姆的。由于 annas_husbandjoeys_dad 都是 Tim,所以两者都会发生这种情况。相反,这与您的情况有关:

var guy;
var guys = [];

guy = { name: "Jake", occupation: "mechanic" }
guys.push(guy);

guy = { name: "Tim", occupation: "mechanic" }
guys.push(guy);
guy.occupation = "supervisor"

guy = { name: "Jeff", occupation: "mechanic" }
guys.push(guy);

guys
// => [
// { name: "Jake", occupation: "mechanic" },
// { name: "Tim", occupation: "supervisor" }
// { name: "Jeff", occupation: "mechanic" },
// ]

在这里,再说一次,你没有改变家伙的职业,你改变了蒂姆的职业。 jack 和杰夫当时不是那个人,所以他们没有得到晋升。 on 的工作方式完全相同 - 它将事件附加到对象,无论对象当前或将来驻留在哪个变量中。

关于javascript - 无法理解nodejs代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25540358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com