我知道这类问题经常出现,但我需要 JavaScript 中类似等待机制的帮助。我知道基于 setTimeout 的解决方案将会出现,但我不确定如何在我的情况下实现它。
我正在编写一个在内部使用 WebSocket 的 API。有一个 connect() 方法可以设置 WebSocket,我需要让它在设置 WebSocket 之后才返回。我希望它返回一个连接是否成功的值,但这不是主要问题。
我遇到的问题是,在用户调用 connect() 后,他们可能会调用另一个依赖 WebSocket 正确设置的方法。如果调用得太早,则会抛出一个错误,指出该对象不可用。
我当前的解决方案是在我确定连接成功并在每种方法中检查每种方法时设置一个“已连接”标志。如果它没有连接,我将方法调用添加到一个队列,该队列由设置标志的相同代码运行。这行得通,但它在我的方法中引入了这种代码风格,并且从用户的角度来看也似乎具有误导性,因为这些函数的调用被延迟了。此外,如果有其他用户代码依赖于这些调用在到达它们之前已完成,那么它的行为将不会像预期的那样。
我一直在绞尽脑汁思考如何处理这个案子。最简单的解决方案是找到一种方法来阻止从连接返回,直到设置 WebSocket 之后,但这并不是真正的 JavaScript 方式。另一种选择是让他们在回调中提供其余代码,但在这种情况下,这似乎是一件奇怪的事情。可能是我想多了?
编辑:为了更好地说明我的问题,以下是用户可以执行的操作示例:
var client = new Client(options);
client.connect();
client.getServerStatus();
getServerStatus() 方法将在内部使用 WebSocket。如果 WebSocket 尚未设置,用户将收到不可用错误。