我有一个带有单个端点的 WebSocket API。 API的基本用法如下:
emit
对 get_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();
}
});
}