如何从所有发出的回调中收集所有响应?

时间:2015-04-07 16:21:44

标签: javascript events asynchronous callback socket.io

我有一个三向socket.io项目,该项目使用relay服务器向emit命令发送hub controller on relay emit到所有节点。

  

我的问题是如何使用emit's回调来收集所有连接节点的所有响应?

对于每个连接的节点,该回调将多次触发。有没有办法收集每个响应并将它们发送到初始发射回调。

以下是整个过程中每个步骤的代码。

// RELAY MESSAGING CLIENT (SENDS MESSAGES TO ADMIN)

io.emit("pricing-relay", {
  sku: "AMZ-PROD"
}, function(errString, responsesFromAllNodes){
  // response from `socket.on("pricing-relay"`)
  // console.log(responsesFromAllNodes)
  /*
     [
        "invalid something", null,
        null, true,
        null, false,
        "invalid something", null,
        null, true,
     ]
  */
})

// HUB CONTROLLER SERVER (DISTRIBUTES TO ALL CONNECTED NODES)

socket.on("pricing-relay", function(data, callback){
  var responses = []
  io.emit("pricing", data, function(errString, response){
    response.push([errString, response])
    // when these are all done responding
    // send callback(null, responses)
  })
})

// DRONE CLIENT (PIECE EXECUTING ASYNC CODE)

io.on("pricing", function(data, callback){
  return changepricing(data, function(err, result){
    if(err) return callback(err.message, result)
    return callback(null, result)
  })
})

1 个答案:

答案 0 :(得分:0)

  

广播

时不支持回叫