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

时间:2015-03-31 16:59:16

标签: 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中调用event_of_my_api

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

请帮我弄清楚如何做到这一点。我希望延迟承诺是解决方案。

1 个答案:

答案 0 :(得分:0)

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

假设$http表示AngularJS,那么如果你想在套接字上收到'event_of_my_api'事件后立即进行GET,那么你可以这样做:

socket.on('event_of_my_api', function(data){
    console.log('my api is working');
    $http.get('path/to/my/api').success(...);
});

如果您想在为'event_of_my_api'事件设置事件处理程序后立即执行GET而不等待实际接收该事件,则可以执行以下操作:

socket.on('event_of_my_api', function(data){
    console.log('my api is working');
});
$http.get('path/to/my/api').success(...);

如果这些都不是理想的方向,那么请进一步澄清问题,确切地知道你想要的时间。

使用promises似乎有几个问题。首先,socket.on()不返回承诺,其次承诺是一次性操作,因此使用单一承诺不适用于可能重复发生的事件(承诺只会改变状态一次,然后是锁定在那个状态)。