javascript - 防止返回,直到满足条件

标签 javascript

我知道这类问题经常出现,但我需要有关 JavaScript 中类似等待机制的帮助。我知道基于 setTimeout 的解决方案将会出现,但我不确定如何在我的情况下实现它。

我正在编写一个在内部使用 WebSocket 的 API。有一个 connect() 方法可以设置 WebSocket,我需要让它在 WebSocket 设置之后才返回。我希望它返回一个值来表明连接是否成功,但这不是主要问题。

我遇到的问题是,用户调用 connect() 后,他们可能会调用另一个依赖于正确设置 WebSocket 的方法。如果调用得太早,则会抛出错误,指出该对象不可用。

我当前的解决方案是在确定连接成功时设置一个“已连接”标志,并在每个方法中检查它。如果未连接,我会将方法调用添加到由设置标志的相同代码运行的队列中。这是可行的,但它在我的方法中引入了这种代码风格,并且从用户的 Angular 来看似乎也具有误导性,因为这些函数的调用被推迟了。此外,如果有其他用户代码依赖于这些调用在到达它们之前完成,则它不会按预期运行。

我绞尽脑汁思考如何处理这个案子。最简单的解决方案是找到一种方法来阻止从连接返回,直到 WebSocket 设置完成,但这并不是真正的 JavaScript 方式。另一种选择是让他们在回调中提供其余的代码,但在这种情况下,这似乎是一件奇怪的事情。也许是我想多了?

编辑:为了更好地说明我的问题,以下是用户可以执行的操作的示例:

var client = new Client(options);
client.connect();
client.getServerStatus();

getServerStatus() 方法将在内部使用 WebSocket。如果尚未设置 WebSocket,用户将收到“不可用”错误。

最佳答案

不幸的是,今天的 Javascript 并没有真正像那样工作。 future (ECMA6)可能会有新的语言功能更直接地解决这个问题。然而,目前您仍坚持使用当前接受的处理异步事件的方法,该方法仅限于回调。您可能还想探索“ promise ”来处理“回调 hell ”,但是为此您需要一个库。

是的,到处都有回调似乎很奇怪,特别是对于刚接触网络编程的人来说,但这确实是现阶段唯一的方法(假设您想要一个跨浏览器友好的解决方案)。

关于javascript - 防止返回,直到满足条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18968088/

相关文章:

javascript - 从任何地方滚动一个 Div

javascript - jQuery 键盘上的延迟

javascript - 在 Safari 中实时 JavaScript 编辑?

javascript - 单击主体上的任意位置并调用函数

javascript - 相当于 Javascript 中的类加载器

javascript - Highcharts - 强制绘图线消耗可用宽度?

javascript - 无法使用 JQuery 设置 Select2 下拉值

c# - 重定向到 URL - asp.net 与 MVC

javascript - 更改随机图像的不透明度(切换)

javascript - 如何在 angular-chart.js 中实现这些数据