【发布时间】:2017-12-13 03:37:26
【问题描述】:
如何将异步函数与事件发射器一起使用,在其他信息来源中说:不要将异步函数与事件发射器一起使用。
我想基本上将异步函数与事件发射器混合,以便它解析并且事件发射器显示消息。
代码如下:
server.on('published', async (packet, client) => { // event emitter with async function
debug(`Received: ${packet.topic}`)
switch (packet.topic) {
case 'agent/connected':
case 'agent/disconnected':
debug(`Payload: ${packet.payload}`)
break
case 'agent/message':
debug(`Payload: ${packet.payload}`)
const payload = parsePayload(packet.payload)
if (payload) {
payload.agent.connected = true
let agent
try {
agent = await Agent.createOrUpdate(payload.agent)
} catch (e) {
return handleError(e)
}
debug(`Agent ${agent.uuid} saved`)
// Notify Agent is Connected
if (!clients.get(client.id)) {
clients.set(client.id, agent)
server.publish({
topic: 'agent/connected',
payload: JSON.stringify({
agent: {
uuid: agent.uuid,
name: agent.name,
hostname: agent.hostname,
pid: agent.pid,
connected: agent.connected
}
})
})
}
// Store Metrics
for (let metric of payload.metrics) {
let m
try {
m = await Metric.create(agent.uuid, metric)
} catch (e) {
return handleError(e)
}
debug(`Metric ${m.id} saved on agent ${agent.uuid}`)
}
}
break
}
})
如果这个问题已经在某个地方完成,我想道歉。我是 nodejs 的新手,但没有发现任何类似的东西。
标题NodeJS 7: EventEmitter + await/async中的类似问题,但与本问题无关。
【问题讨论】:
-
代码有效吗?如果不是,请描述您遇到的问题,因为“它不起作用”不是一个空洞的问题描述
-
“在其他信息来源中说” - 它在哪里说,你能链接那些吗?还有,你为什么不相信他们?
-
是的,您可以在任何地方使用
async函数作为回调。但是,事件发射器不会从中获得任何收益,它只会将返回的 Promise 扔掉。 -
@JaromandaX 不,我的代码不起作用,基本上我的问题与这个线程github.com/mcollina/mosca/issues/711 相关,但不明白答案。
标签: javascript node.js async-await eventemitter