在socket.io中收集返回的套接字结果

时间:2019-05-30 07:55:11

标签: javascript node.js socket.io

在node.js(express.js)中,我无法在端点中进行多次返回。

CREATE TABLE SALES 
(
  CUSTOMER   VARCHAR(80)
, REGION     CHAR(5)
, YEAR       INTEGER
)
IN USERSPACE1
DISTRIBUTE BY HASH (YEAR);

我如何等待并收集要完成的流,然后仅将let result = {} socket.on('receive_stream', ({data}) => { result = { ...result, ...data, } // must I send it here? res.send(result) }) res.send(result) //this is empty object 发送给客户端?

3 个答案:

答案 0 :(得分:0)

let result = {}
socket.on('receive_stream', ({data}) => {

  result = { 
     ...result,
     ...data,
  }
  // have to uncommented in case always opened socket     
 // res.send(result);
})


socket.on('end', () => {
  res.send(result);
 } );

但是您可以使用JSON.stringify(result)将对象转换为字符串,并且仅在关闭套接字的情况下才有效。如果始终打开,则永远不会触发结束事件

答案 1 :(得分:0)

似乎您有2个流。因此,理论上您可以只管。

socket.pipe(res);

socket.on('receive_stream', data => res.emit('data', data));
socket.on('end', data => res.emit('end'));

答案 2 :(得分:0)

是的,在您的情况下,您必须在套接字的回调中调用 req.send()

但是有很多方法,问题出在您的代码结构设计模式上,您应该阅读与“ JavaScript中的回调承诺异步等待”相关的帖子