Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在emit内部异步返回数据_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 在emit内部异步返回数据

Javascript 在emit内部异步返回数据,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我在node.js中编写了一个后台进程,它使用EventEmitter,如下所示: var event = { returnValue: undefined }; eventEmitter.emit('name', event, argument); return event.returnValue; // Example of doing things with event.returnValue. asyncEmitter.on('name', async (event, argument

我在node.js中编写了一个后台进程,它使用EventEmitter,如下所示:

var event = { returnValue: undefined };
eventEmitter.emit('name', event, argument);
return event.returnValue; // Example of doing things with event.returnValue.
asyncEmitter.on('name', async (event, argument) => {
    event.argument = await asyncMethod(); // Nice and clean code!
});
活动的另一端:

eventEmitter.on('name', (event, argument) => {
    var returnValue = await asyncMethod(); // <- This method returns a Promise, so I could use await if possible or some other solution.
    event.returnValue = returnValue;
});
eventEmitter.on('name',(事件,参数)=>{

var returnValue=await asynchmethod()//因为等待承诺在没有回调的情况下同步解析,或者使用带有异步回调的EventEmitter,似乎并不存在任何直观的方式,我编写了自己的包含数组的简单EventEmitter,以及自定义的
emit
方法

它正确地处理用作参数的异步函数,因此我可以这样使用它:

var event = { returnValue: undefined };
eventEmitter.emit('name', event, argument);
return event.returnValue; // Example of doing things with event.returnValue.
asyncEmitter.on('name', async (event, argument) => {
    event.argument = await asyncMethod(); // Nice and clean code!
});
当然,我可以进一步开发它,创建一个
once
函数等等,但对我来说,我实际上只依赖
on
emit

我想知道为什么节点团队还没有解决这个问题?

不太清楚您对
的意思是什么,一个解决方案可以是将returnValue设置为Promise,但这很快变得不切实际,特别是因为我的一些函数迭代了多个异步函数。
以及为什么这是一个问题。“一个解决方案可能是将
returnValue
设置为承诺”-是的,这就是解决方法。为什么你认为这变得不切实际?你能举一个“通过多个异步函数进行迭代”的例子吗"?@Bergi如果我有多个函数返回承诺,或者在循环中迭代某个列表或数组调用异步函数,那么代码很快就会变得混乱。@Einod你的意思是,在单事件回调中?或者你正在谈论安装多个事件侦听器?如果是前者,你可以轻松地为everyt构建一个承诺使用
然后
链、
异步
/
等待
语法或
承诺。所有
@einord
event.returnValue=Promise。所有(项目)
就是这样。