首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在node.js的事件库中发送到异步监听器时,如何修复null参数?

在node.js的事件库中发送到异步监听器时,如何修复null参数?
EN

Stack Overflow用户
提问于 2019-07-21 06:47:09
回答 1查看 98关注 0票数 0

我有三个js类:要导出的事件对象类,一个类具有emit函数,另一个类是构造函数中的侦听器。我有三个侦听器正在使用setImmediate()使其异步。第一个监听器能够正确获取参数,但其他两个监听器无法正确获取参数。

我尝试在setImmediate()回调之前将其打印出来,并且能够看到正确的参数。

代码语言:javascript
运行
复制
bus.on('event', (input) => {
    setImmediate(() => {
         function(input); //parameter are not null here
    });
}, this);
bus.on('event', (input) => {
    //console.log(input) when printing the input here, I can see the values
    setImmediate(() => {
         function2(input); //null
    });
}, this);
bus.on('event', (input) => {
    setImmediate(() => {
         function3(input);
    });
}, this);

我希望input[e1, e2, e3,但实际输出为null

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-21 09:29:07

如果在您进入事件处理程序时input是正确的,但在setImmediate()之后不是,那么在您能够使用它之前,一定是代码中的其他东西更改了数组。这是在异步代码中传递可变对象的危险。

为了保护自己不受此影响,您可以复制数组,这样其他人就不能更改它。

代码语言:javascript
运行
复制
bus.on('event', (input) => {
    // make copy of input so nobody else will change it
    let inputCopy = input.slice();
    setImmediate(() => {
         function2(inputCopy);
    });
}, this);

注意:如果您的数组包含对象,并且这些对象本身可能会被其他人更改,那么上面的副本不会保护您免受这种情况的影响。

您也可以通过在这里不使用setImmediate()而只同步处理数组来避免这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57129151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档