Javascript socket.on()方法回调成功

Javascript socket.on()方法回调成功,javascript,socket.io,promise,Javascript,Socket.io,Promise,我想在添加事件侦听器后立即发出GET请求,如下所示 socket.on('event_of_my_api', function(data){ console.log('my api is working'); }) .then( $http.get('path/to/my/api') ); 其中,我的api的事件应该在我的api中调用,如下所示: ### in my api ### socket.emit('event_of_my_api', data);

我想在添加事件侦听器后立即发出GET请求,如下所示

  socket.on('event_of_my_api', function(data){
    console.log('my api is working');
  })
  .then(
    $http.get('path/to/my/api')
  );
其中,我的api的事件应该在我的api中调用,如下所示:

 ### in my api ###
 socket.emit('event_of_my_api', data);

请帮我弄清楚怎么做。我希望延迟承诺是解决这个问题的办法。

我不清楚你的问题到底是什么意思,因为你在标题和第一句话中有矛盾的词语,表明问题的不同方向,但这里有两种可能的解释/答案

假设$http表示AngularJS,那么如果您想在套接字上收到“event\u of_my\u api”事件后立即执行GET,那么您可以执行以下操作:

socket.on('event_of_my_api', function(data){
    console.log('my api is working');
    $http.get('path/to/my/api').success(...);
});
socket.on('event_of_my_api', function(data){
    console.log('my api is working');
});
$http.get('path/to/my/api').success(...);
如果要在为“event\u of_my\u api”事件设置事件处理程序后立即执行GET,而不等待实际接收该事件,可以执行以下操作:

socket.on('event_of_my_api', function(data){
    console.log('my api is working');
    $http.get('path/to/my/api').success(...);
});
socket.on('event_of_my_api', function(data){
    console.log('my api is working');
});
$http.get('path/to/my/api').success(...);
如果这两个方向都不是理想的方向,那么请进一步澄清问题,以确定您希望的时间安排


在这方面使用承诺似乎有几个问题。首先,socket.on不返回承诺,其次承诺用于一次性操作,因此使用单个承诺不会导致可能重复发生的事件。承诺只会更改一次状态,然后锁定在该状态。

我认为您根本不应该这样做,另请参阅。事件api不应使用单一承诺实现。