强制 socketio 事件监听器等待回调

时间:2021-04-19 17:43:39

标签: javascript websocket socket.io

我有一个带有单个端点的 WebSocket API。 API的基本用法如下: emitget_results 的查询。 API 将响应 query_id,确认查询。然后,API 将向 results 发出多个响应。当 API 完成为给定查询发出所有结果后,它会发送到 results_finished

我在遍历一系列测试用例查询时遇到了一些问题。我想一次做一个 - 发出一个查询,获取它的所有结果,然后再进行下一个查询。

不过,这不是下面代码中发生的情况。在调用回调之前,客户端继续进行下一个查询。有什么想法吗?

var socket;

$(document).ready(function () {
  socket = io.connect(api_url, {
    transports: ["polling", "websocket"],
  });
}

function run_test_cases() {
  var x = 0;
  function _run_test_case() {
    const tc = test_cases[x];
    socket.emit("get_results", tc);
    socket.on("results_query_id", function (q) {
      console.log("Query: %o Query id: %s", tc, q['query_id']);
      receive_results(function () {
        x++;
        if (x < test_cases.length) {
          _run_test_case();
        }
      });
    });
  }
  _run_test_case();
  console.log("Finished all test cases")
}

function receive_results(cb) {
  results.length = 0;

  socket.on("results", function (result) {
    console.log(JSON.stringify(result, undefined, 2));
  });

  socket.on("results_finished", function (q) {
    console.log(`Finished for query ` + q['query_id']);
    if (cb) {
      cb();
    }
  });
}

0 个答案:

没有答案