【发布时间】:2014-04-21 13:44:45
【问题描述】:
我有一个控制器 (MyController),它在初始化时从 websocket 连接 (wsService) 请求数据。
检测并等待 websocket 连接打开然后从控制器发出请求的最佳方法是什么?
现在我正在使用以下解决方案:
my_controller.dart:
MyController(wsService ws){
// when refresh() in wsService is called,
// the call is redirected to MyController's load()
ws.refresh = load;
}
load(){
ws.send(request);
}
ws_service.dart:
onConnect(){ //this is called when websocket connection is opened
refresh(); //this calls MyController's load()
}
【问题讨论】:
-
stackoverflow.com/questions/22417566 包含一个很好的例子(参见 web\main.dart)。您需要对 Futures 使用异步编程。
webSocket.onOpen.onOpen.first.then((x) => onConnect()); -
我刚刚看到这个例子来自你。那我不明白你的问题。
-
我的问题是,当 MyController 初始化时,websocket 连接还没有打开。在我的问题中,我已经为该问题提供了解决方案(在连接打开后调用 load()),但我不确定这是不是最好的方法。
-
我还没有尝试过,但你可以检查 ws.readyState 并且当它尚未打开时,你可以像在你的示例中那样监听“打开”。 developer.mozilla.org/en-US/docs/Web/API/…
-
@GünterZöchbauer 谢谢。我删除了
ws.refresh = load;并更新了 MyController 的构造函数:_scope.$watch(() => ws.webSocket.readyState, (state) => (state == WebSocket.OPEN) ? load() : null);现在更容易理解正在发生的事情,而且 wsService 也不再受到污染。我认为你应该用这个解决方案“回答”。
标签: dart angular-dart